Подсчет количества записей (произвольный тип записи) Проблемы с запросом
Я пытаюсь подсчитать общее количество записей произвольного типа "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 } ?>

Функция wp_count_posts
имеет параметр $type
для указания типа записи, которую нужно подсчитать. Вы должны использовать этот параметр, если хотите получить количество вакансий.
Например:
$count_posts = wp_count_posts( 'jobs' )->publish;

Замените эти значения на ваши 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>";

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

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