• Gelöst Markus Böhm

    (@markusboehm)


    Hallo,

    ich versuche gerade ein Plugin zu erstellen das es mir erlaubt an beliebiger Stelle per Shortcode eine angegebene Menge an Kommentaren wiederzugeben.

    bisher sieht mein Code wie folgt aus:

    <?php
    /**
      * Plugin Name:  Letzte Kommentare per Shortcode
      * Plugin URI: https://fit4rescue.de
      * Description: Die letzten Kommentare per Shortcode einbinden. [last_comments_shortcode menge=5]
      * Version: 1.0
      * Author: Markus Böhm
      * Author URI: https://fit4rescue.de
      * License: GPL2
      * License URI:  https://www.gnu.org/licenses/gpl-2.0.html
      * Text Domain:  last_comments_over_shortcode
    */
    
    function last_comments_over_shortcode($atts, $content = null)
    {
    	extract(shortcode_atts(array( 'menge' => null, ), $atts));
        //Standard Werte
        $values = shortcode_atts( array(
            'menge'      => '5',
        ), $atts );
        //Andere Menge außer 5 setzen
        if($values['menge'] != '5'){
    		$limit = $values['menge'];
        }else{
    		$limit = '5';
    	}
    	
        global $wpdb;
    
        $results = $wpdb->get_results('
            SELECT
                c.comment_ID,
                c.comment_author,
                c.comment_content,
                p.ID,
                p.post_title
            FROM
                '.$wpdb->comments.' c
            INNER JOIN
                '.$wpdb->posts.' p ON (c.comment_post_id = p.ID)
            WHERE
                comment_approved = "1"
                AND c.comment_type = ""
                AND p.post_status != "trash"
            ORDER BY c.comment_date DESC
            LIMIT '.$limit.'
        ');
    
        $content = '<ul>';
    
        foreach ($results as $row)
        {
            $comment_url = get_comment_link($row->comment_ID);
            $comment_author = $row->comment_author;
            $comment_text = mb_substr($row->comment_content, 0, 50, 'utf-8').'...';
            $content .= '<li><a href="'.$comment_url.'" title="Kommentar zu: ' . $row->post_title . '">';
            $content .= $comment_author.': '.$comment_text;
            $content .= '</a></li>';
        }
    
        $content .= '</ul>';
    	
    
        return $content;
    }
    
    add_shortcode('last_comments_shortcode', 'last_comments_over_shortcode');
    
    ?>

    Wenn ich nun folgenden Shortcode auf eine X Beliebige Seite einsetze:
    [last_comments_shortcode menge=7]
    erhalte ich bisher keine Ausgabe.

    Ich finde einfach den Fehler nicht. Wer könnte mir vielleicht dabei helfen?
    Bin noch nicht ganz so fit im Thema WordPress.

    Beste Grüße Markus

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 6 Antworten – 1 bis 6 (von insgesamt 6)
  • Warum nutzt du nicht einfach den Block Neueste Kommentare? 🙂

    Ich versuche direkte Datenbankabfragen zu vermeiden und verwende lieber die eingebauten WordPress-Funktionen.

    Ich hab da mal rasch was auf Pastebin gepostet: https://pastebin.com/5GyuQQaK

    Thread-Starter Markus Böhm

    (@markusboehm)

    Da dieser Shortcode zwischen einen Shortcode muss der überprüft welche Benutzergruppe angemeldet ist. und dementsprechend die Kommentare anzeigt oder auch nicht.
    Danke, schau ich mir gleich mal an.

    Thread-Starter Markus Böhm

    (@markusboehm)

    war mein fehler sozusagen die direkte abfrage aus der Datenbank?

    Thread-Starter Markus Böhm

    (@markusboehm)

    Ersteinmal schonmal Danke für diese extrem Schnelle Rückantwort.
    Jetzt habe ich nur noch eine Frage warum wird mir meine Menge aus dem Shortcode nicht übernommen?

    function last_comments_over_shortcode( $atts, $content = null ) {
    	shortcode_atts( array( 'menge' => null ), $atts );
    	// Standard Werte.
    	$values = shortcode_atts(
    		array(
    			'menge' => 5,
    		),
    		$atts
    	);
    	// Andere Menge außer 5 setzen.
    	if ( 5 !== $values['menge'] && is_integer( $values['menge'] ) ) {
    		$limit = $values['menge'];
    	} else {
    		$limit = 5;
    	}
    
    	$content = '<ul>';
    
    	$recent_comments = get_comments(
    		array(
    			'number'      => $limit, // number of comments to retrieve.
    			'status'      => 'approve', // we only want approved comments.
    			'post_status' => 'publish', // limit to published comments.
    		)
    	);
    
    	if ( $recent_comments ) {
    		foreach ( (array) $recent_comments as $comment ) {
    
    			$comment_url    = get_comment_link( $comment->comment_ID );
    			$comment_author = $comment->comment_author;
    			$comment_text   = mb_substr( $comment->comment_content, 0, 50, 'utf-8' ) . '...';
    			$content       .= '<li><a href="' . $comment_url . '" title="Kommentar zu: ' . $comment->post_title . '">';
    			$content       .= $comment_author . ': ' . $comment_text;
    			$content       .= '</a></li>';
    		}
    
    		$content .= '</ul>';
    	}
    
    		return $content;
    }
    
    	add_shortcode( 'last_comments_shortcode', 'last_comments_over_shortcode' );

    Wenn ich bei 'number' => 2, eingebe funktioniert es mit 2 aber sobald ich eine variable angebe geht es nicht.

    • Diese Antwort wurde geändert vor 2 Jahren, 8 Monaten von .
    Thread-Starter Markus Böhm

    (@markusboehm)

    Fehler gefunden. Keine Ahnung warum er den integer Wert nicht richtig geprüft hat!

    ohne geht es jetzt zumindest:

    	// Andere Menge außer 5 setzen.
    	if ( $values['menge'] != 5 ) {
    		$limit = $values['menge'];
    	} else {
    		$limit = 5;
    	}

    Besten Dank nochmal für die Unterstützung.

    Da war ich wohl etwas schnell … 😅

    Ich hab den Code korrigiert.

Ansicht von 6 Antworten – 1 bis 6 (von insgesamt 6)
  • Das Thema „Kommentare per Shortcode einbinden – eigenes Plugin“ ist für neue Antworten geschlossen.