webentwicklung-frage-antwort-db.com.de

Zählen Sie die Gesamtzahl der Posts in jeder Schleife

Ich habe das folgende Skript verwendet (nur mit get_permalink ....), um Beiträge von einem Beitragstyp anzuzeigen, bei dem der Beitragsautor ein zusätzliches Metafeld auf seiner Benutzerseite hat:

<?php // get users from user page
    $blogusers = get_users();
    foreach ($blogusers as $user) {
        if(get_field('races','user_' . $user->ID)) {
        while(the_repeater_field('races','user_' . $user->ID)) {
            $signed_up = get_sub_field('race_name', $post_object->ID);
            if($original_id == $signed_up->ID) { //original ID is the race_name post we are on      
            $user_info = get_userdata($user->ID);

                $arg = array( 
                'post_type' => array ('members'),
                'post_status' => array( 'publish'),
                'posts_per_page' => 200,
                'author' => $user_info->ID
                );
                $arg_query = new WP_Query();
                $arg_query->query( $arg );

                echo $total = $arg_query->post_count;

            } else {
            }
        }
    }
} ?>

Es hat zwar funktioniert, die Titel der Beiträge des Beitragstyps des Mitglieds anzuzeigen, aber ich kann mich nicht darum kümmern, diese Beiträge zu zählen. Es zeigt: 1 1 1 statt 3 und so weiter. Wie kann ich foreach so einstellen, dass es richtig funktioniert?

2
elbatron

Danke für die Ideen. Schließlich habe ich eine schnelle Lösung gefunden, die die richtigen Zahlen in dem von mir benötigten Format zu liefern scheint. Ich bin sicher, dass es eine sauberere Methode gibt, um Ergebnisse aus einer solchen Abfrage zu erhalten, aber ich habe bisher noch nichts Ähnliches gesehen.

<?php // get users from user page
$blogusers = get_users();
$i = 0;
foreach ($blogusers as $user) {
    if(get_field('races','user_' . $user->ID)) {
    while(the_repeater_field('races','user_' . $user->ID)) {
        $signed_up = get_sub_field('race_name', $post_object->ID);
        if($original_id == $signed_up->ID) { //original ID is the race_name post we are on      

            $arg = array( 
            'post_type' => array ('members'),
            'post_status' => array( 'publish'),
            'posts_per_page' => 200,
            'author' => $user_info->ID
            );
            $arg_query = new WP_Query();
            $arg_query->query( $arg );

        $i++;

        } else {
        }
    }
}
} if($i>0) { echo $i; } ?>
0
elbatron

Bearbeiten: Beim erneuten Lesen Ihrer Frage ist mir aufgefallen, dass ich möglicherweise einige Dinge durcheinander gebracht habe, aber der Punkt bleibt, dass Sie diese separaten Abfragen, die in der Schleife ausgeführt werden, kombinieren sollten, indem Sie Variablen in der Schleife verwenden, um eine umfassende Liste der von Ihnen angegebenen Abfrageargumente zu erstellen kann verwendet werden, um eine Abfrage außerhalb der Schleife durchzuführen.

Ich habe leider keine Zeit, eine genauere Antwort zu geben.


Ursprünglicher Beitrag: Sie erhalten 1 1 1, weil Sie für jeden Benutzer eine separate Abfrage durchführen.

Sie können diese Abfragen zu einer Abfrage zusammenfassen. Dann funktioniert $arg_query->post_count wie gewünscht. Verwenden Sie dazu die foreach-Schleife, um alle Autoren-IDs abzurufen und in einem Array zu speichern. Nachdem die foreach-Schleife beendet ist, führen Sie die Abfrage unter Verwendung der gespeicherten Autoren-IDs für das Autorenargument durch.

Die WP_Query-Codexseite zeigt dieses grundlegende Beispiel für die Abfrage von Beiträgen mehrerer Autoren:

$query = new WP_Query( 'author=2,6,17,38' );

übrigens, warum get_userdata() verwenden, wenn Sie es nur verwenden, um den Benutzer ID zu erhalten, den Sie bereits haben?

2
W van Dam