Проверьте, существуют ли записи в категории пользовательских типов записей, вне цикла
Я создаю навигацию вне основного цикла, которая включает выпадающие списки. У меня есть пользовательский тип публикации под названием "События", который имеет свои собственные категории. Я хотел бы, чтобы было выпадающее меню, если в этом пользовательском типе и категории сообщений есть сообщения, но я не уверен, какие функции я должен использовать для определения этого...
У меня есть...
$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
..// show the drop down menu
}
Должен ли я вообще использовать get_posts()
? Все, что я получаю, имеет пустой массив, но я знаю, что некоторые к этим категориям относятся должности...
Большое спасибо, Вашингтон.
4 answers
В конце концов все сводится к WP_Query, даже если вы используете get_posts, вот моя измененная версия:
$hasposts = get_posts('post_type=sc-events&category=40');
if( !empty ( $hasposts ) ) {
..// show the drop down menu
}
Или
$query = new WP_Query(array(
'post_type' => 'sc-events',
'category' => 40
));
if( $query->have_posts() ){
echo 'we have posts';
} else {
echo 'no posts found';
}
Хотя это будет работать, есть альтернатива, вдохновленная вашим собственным ответом, в котором используется категория slug, а не ее идентификатор:
$term = get_term_by('name', 'whatever category 40 is called', 'category');
if($term != false ){
if($term->count > 0 ){
// we have posts
}
}
Если вы хотите иметь массив со всеми терминами внутри вашей пользовательской таксономии с дополнительным условием, чтобы они содержались, по крайней мере, в сообщении, это функция, которую вы ищете:
get_terms(
'group',
array(
'hide_empty' => true
)
);
Это позволит получить информацию о терминах , а не о самих сообщениях. Единственное, что вы знаете о сообщениях в этом сценарии, - это то, что они существуют в рамках этих условий, и ничего больше. Если в выпадающем меню будет отображаться какая-то информация о сообщениях, возможно вам понадобится что-то еще, кроме вышеперечисленного. В противном случае get_terms - это функция, которую вы ищете.
Я смог выполнить эту условную проверку с помощью следующего кода -
if (get_category('40')->category_count > 0) {
..//show the drop down
}
Нет причин возвращать полный объект get_posts. Вы можете улучшить оптимизацию, используя параметр fields для возврата только идентификатора
$posts = get_posts( array(
'post_type' => 'Events',
'posts_per_page' => 1,
'fields' => 'ids',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => array( '40' )
),
),
) );
if ( ! empty ( $posts ) ) {
..// show the drop down menu
}