Подсчет количества записей (произвольный тип записи) Проблемы с запросом

22 авг. 2011 г., 15:26:58
Просмотры: 67.9K
Голосов: 19

Я пытаюсь подсчитать общее количество записей произвольного типа "jobs". Мой запрос возвращает "0", хотя я знаю, что записи существуют. Думаю, что он не проверяет наличие записей данного типа, но я не понимаю почему... есть идеи?

<?php $jobs = new WP_Query(array( 'post_type' => 'jobs' ));?>
<?php if ($jobs->have_posts()) { 

    $count_posts = wp_count_posts()->publish; 
    if ( $count_posts == "1" ) { 
        echo "<h2>В настоящее время есть одна вакансия...</h2>"; }
    else { echo "<h2>В настоящее время имеется $count_posts вакансий...</h2>"; }

} else { ?>
<h2>В настоящее время вакансий нет.</h2>
<?php } ?>
2
Комментарии

Кстати, пробовали ли вы count($jobs) или print_r($jobs), чтобы просто посмотреть исходные результаты запроса?

redconservatory redconservatory
22 авг. 2011 г. 15:35:21

Нет, только что попробовал, и это ничего полезного не дает.

Dan Lee Dan Lee
22 авг. 2011 г. 15:51:30
Все ответы на вопрос 3
0
58

Функция wp_count_posts имеет параметр $type для указания типа записи, которую нужно подсчитать. Вы должны использовать этот параметр, если хотите получить количество вакансий.

Например:

$count_posts = wp_count_posts( 'jobs' )->publish;
22 авг. 2011 г. 17:04:16
3

Замените эти значения на ваши meta_key и meta_value:

$meta_key = 'x';
$meta_value = '2';

$sql = "SELECT count(DISTINCT pm.post_id)
FROM $wpdb->postmeta pm
JOIN $wpdb->posts p ON (p.ID = pm.post_id)
WHERE pm.meta_key = '$meta_key'
AND pm.meta_value = '$meta_value'
AND p.post_type = 'post'
AND p.post_status = 'publish'
";

$count = $wpdb->get_var($sql);
echo "<p>Количество: $count</p>";
27 нояб. 2013 г. 10:57:21
Комментарии

Использование чистого SQL в коде — это очень плохая практика. В WordPress есть множество функций-обёрток, которые делают то же самое и даже больше.

NoSense NoSense
5 окт. 2014 г. 17:15:38

@NoSense кроме того, встроенные функции-обёртки действительно очень медленные, так как возвращают кучу метаданных, которые никто не запрашивал. Использование SQL — это действительно эффективный способ получить именно те данные, которые вам нужны.

Sam Sam
31 мая 2020 г. 20:49:49

Заметка себе ЗАКЛАДКА: Это может пригодиться при тестировании SQL-запроса для фильтрации по связанным пользовательским метаданным

Eric Hepperle - CodeSlayer2010 Eric Hepperle - CodeSlayer2010
29 янв. 2025 г. 22:38:09
2

Другой способ, с использованием WP-CLI:

wp eval 'echo wp_count_posts( "post" )->publish;'; echo
6 июл. 2020 г. 20:02:42
Комментарии

это не решает проблему здесь. Кроме того, ваш пример тоже неверный!

Sabbir Hasan Sabbir Hasan
8 июл. 2020 г. 14:11:57

Можно ли это использовать одновременно для записей и товаров?

Brad Dalton Brad Dalton
14 сент. 2023 г. 19:30:35