Verwenden der $ wpdb-class zum Abrufen der letzten Kommentare in einem Netzwerk

Auf der Suche nach einer sauberen und einfachen Möglichkeit, Kommentare aus einem Netzwerk mithilfe der databaseklasse $ wpdb zu erstellen.

Ich habe diese Antwort gefunden , die geschützt wurde und vier Jahre alt ist.

Ich habe es in eine function eingepackt und versucht, es auf der Startseite meines Netzwerks aufzurufen, aber es hat nicht funktioniert. Ich habe auch mit der mysql-statement gespielt, konnte aber keine Ausgabe erzeugen.

Folgendes habe ich:

function display_sitewide_comments() { global $wpdb; $number = 20; // maximum number of comments to display $selects = array(); $args = array(); foreach (wp_get_sites( $args ) as $blog) // select only the fields you need here! $selects[] = "(SELECT comment_post_ID, comment_author, comment_author_email, comment_date_gmt, comment_content, post_title, {$blog['blog_id']} as blog_id FROM {$wpdb->base_prefix}{$blog['blog_id']}_comments LEFT JOIN {$wpdb->base_prefix}{$blog['blog_id']}_posts ON comment_post_id = id WHERE post_status = 'publish' AND post_password = '' AND comment_approved = '1' AND comment_type = '' ORDER BY comment_date_gmt DESC LIMIT {$number})"; // real number is (number * # of blogs) $comments = $wpdb->get_results(implode(" UNION ALL ", $selects)." ORDER BY comment_date_gmt DESC", OBJECT); $count = 0; foreach((array)$comments as $comment): $count++; if($count == $number+1) break; ?> 
  • comment_author_email, 32); ?> <a href="https://wordpress.stackexchange.com/questions/141619/using-wpdb-class-to-pull-recent-comments-across-a-network/blog_id, $comment->comment_post_ID); ?>" title="commented on post_title); ?>"> comment_author; ?> wrote: comment_content)); ?> (comment_date_gmt}")); ?>)
  • <?php endforeach; }

    Ich frage mich, seit der Post 4 Jahre alt ist, ob sich etwas im core geändert hat, oder die databasestruktur, um die Abfrage überflüssig zu machen? Oder möglicherweise gibt es einen Fehler, den ich nicht sehen kann. Im Debug-Modus werden keine Fehler ausgegeben. Ich habe auch ein leeres $ args-Array deklariert und benutzt, wie es im ursprünglichen Beitrag vorgeschlagen wurde.

    Dachte, das war eine sehr nützliche function und mehr Leute als ich hatten Probleme damit.

    Vielen Dank.

    Solutions Collecting From Web of "Verwenden der $ wpdb-class zum Abrufen der letzten Kommentare in einem Netzwerk"

    Warum nicht get_comments() , anstatt selbst mit $wpdb zu rollen?

     function display_sitewide_comments() { $sites = wp_get_sites(); $network_comments = array(); $max = 20; foreach( $sites as $site ) { switch_to_blog( $site->blog_id ); $args = array( 'number' => $max, 'status' => 'approved', ); $network_comments[$site->blog_id] = get_comments( $args ); restore_current_blog(); } // inspect the comments var_dump( $network_comments ); } 

    Bearbeitet um hinzuzufügen:

    Wenn Sie nur die 20 neuesten Kommentare möchten, können Sie $network_comments[$site->blog_id] = get_comments( $args ); zu etwas wie

     $comments = get_comments( $args ); foreach( $comments as $comments ) { $network_comments[] = $comment; } 

    Verwenden usort() dann am Ende der Schleife usort() , um die Kommentare basierend auf $comment->comment_date_gmt und sie dann auf $max Werte $comment->comment_date_gmt .

    Verweise

    • wp_get_sites()
    • switch_to_blog() & restore_current_blog()
    • get_comments()