Подсчитайте общее количество записей в цикле foreach


Я использовал следующий скрипт (только с get_permalink....) для отображения сообщений из типа сообщения, в котором у автора сообщения есть дополнительное мета-поле на его странице пользователя:

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

Хотя это работало для отображения заголовков сообщений из типа сообщений участников, я не могу собраться с мыслями, чтобы сосчитать эти сообщения. Он показывает: 1 1 1 вместо 3 и так далее. Как я могу изменить значение foreach, чтобы оно работало правильно?

Author: elbatron, 2012-07-30

2 answers

Редактировать: Перечитывая ваш вопрос, я заметил, что, возможно, я кое-что перепутал, но суть остается в том, что вы должны объединить эти отдельные запросы, выполняемые внутри цикла, используя переменные внутри цикла, чтобы создать полный список аргументов запроса, которые вы можете использовать для выполнения одного запроса вне цикла.

К сожалению, у меня нет времени дать более подробный ответ.


Оригинальное сообщение: Вы получаете 1 1 1, потому что вы выполняете отдельный запрос для каждого пользователя.

Вы можете объединить эти запросы в один запрос, и тогда $arg_query->post_count будет работать так, как вы хотите. Для этого используйте цикл foreach, чтобы получить все идентификаторы авторов, сохранив их в массиве. Затем, после завершения цикла foreach, вы выполняете запрос, используя сохраненные идентификаторы автора для аргумента автора.

Страница кодекса WP_Query показывает этот базовый пример для запроса сообщений от нескольких авторов:

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

Кстати, зачем использовать get_userdata(), если вы используете его только для получения пользователь ID, который у вас уже есть?

 2
Author: W van Dam, 2012-07-31 21:49:23

Спасибо за идеи. Наконец я нашел быстрое решение, которое, кажется, дает правильные цифры в нужном мне формате. Я уверен, что есть более чистый метод получения результатов от такого запроса, но до сих пор я не видел ничего подобного.

<?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
Author: elbatron, 2012-08-02 12:59:37