web-dev-qa-db-fra.com

Compter le nombre total de publications dans la boucle foreach

J'ai utilisé le script suivant (uniquement avec get_permalink ....) pour afficher les publications à partir d'un type de publication où l'auteur de la publication a un champ méta supplémentaire sur sa page utilisateur:

<?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 {
            }
        }
    }
} ?>

Bien que cela ait fonctionné d'afficher les titres des publications à partir du type de publication des membres, je n'arrive pas à me débrouiller pour compter ces publications. Il montre: 1 1 1 au lieu de 3 et ainsi de suite. Comment puis-je changer le foreach pour fonctionner correctement?

2
elbatron

Merci pour les idées. Finalement, j'ai trouvé une solution rapide qui semble donner les bons chiffres dans le format dont j'ai besoin. Je suis sûr qu'il existe une méthode plus propre pour obtenir des résultats à partir d'une requête de ce type, mais je n'ai encore rien vu de similaire.

<?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

Edit: Relisant votre question, j’ai remarqué que j’avais peut-être mélangé certaines choses, mais il reste que vous devez combiner ces requêtes distinctes effectuées dans la boucle, en utilisant des variables à l’intérieur de la boucle pour créer une liste complète des arguments de requête que vous avez définis. peut utiliser pour effectuer une requête en dehors de la boucle.

Je n'ai malheureusement pas le temps de donner une réponse plus détaillée.


Message original: Vous obtenez 1 1 1 parce que vous effectuez une requête distincte pour chaque utilisateur.

Vous pouvez combiner ces requêtes en une seule requête. $arg_query->post_count fonctionnera comme vous le souhaitez. Pour ce faire, utilisez la boucle foreach pour obtenir tous les ID d’auteur, en les stockant dans un tableau. Ensuite, une fois la boucle foreach terminée, vous exécutez la requête en utilisant les identifiants d’auteurs stockés pour l’argument d’auteur.

La page de codex WP_Query présente cet exemple de base pour interroger des publications de plusieurs auteurs:

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

au fait, pourquoi utiliser get_userdata() si vous ne l'utilisez que pour obtenir l'utilisateur ID que vous avez déjà?

2
W van Dam