Проверьте, существуют ли записи в категории пользовательских типов записей, вне цикла


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

У меня есть...

$hasposts = get_posts('post_type=Events&category=40');
if($hasposts) {
    ..// show the drop down menu
} 

Должен ли я вообще использовать get_posts()? Все, что я получаю, имеет пустой массив, но я знаю, что некоторые к этим категориям относятся должности...

Большое спасибо, Вашингтон.

 2
Author: RCNeil, 2013-02-14

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
    }
}
 6
Author: Tom J Nowell, 2013-02-14 18:08:03

Если вы хотите иметь массив со всеми терминами внутри вашей пользовательской таксономии с дополнительным условием, чтобы они содержались, по крайней мере, в сообщении, это функция, которую вы ищете:

get_terms(
    'group',
    array(
        'hide_empty' => true
    )
);

Это позволит получить информацию о терминах , а не о самих сообщениях. Единственное, что вы знаете о сообщениях в этом сценарии, - это то, что они существуют в рамках этих условий, и ничего больше. Если в выпадающем меню будет отображаться какая-то информация о сообщениях, возможно вам понадобится что-то еще, кроме вышеперечисленного. В противном случае get_terms - это функция, которую вы ищете.

 0
Author: Tomas Buteler, 2013-02-14 17:21:05

Я смог выполнить эту условную проверку с помощью следующего кода -

if (get_category('40')->category_count > 0) {
    ..//show the drop down
}
 0
Author: RCNeil, 2013-02-14 17:24:46

Нет причин возвращать полный объект 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
}
 0
Author: WPExplorer, 2015-08-04 20:54:10