Подсчитайте общее количество записей в цикле 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, чтобы оно работало правильно?
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
, который у вас уже есть?
Спасибо за идеи. Наконец я нашел быстрое решение, которое, кажется, дает правильные цифры в нужном мне формате. Я уверен, что есть более чистый метод получения результатов от такого запроса, но до сих пор я не видел ничего подобного.
<?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; } ?>