posts_per_page=> 0 список всех сообщений для определенной категории в wordpress

#php #wordpress

#php #wordpress

Вопрос:

Я работаю над веб-страницей WordPress, на которой я хочу показать нулевой пост для определенной категории. Ниже приведен код для этого:

 <?PHP
   $temp_args = [
       'post_status' => 'publish',
       'orderby' => array(
           'feat_yes' => 'ASC',
           'post_type' => 'ASC',
           'date' => 'DESC'),
       'posts_per_page' => $data->{"no_articles_".ICL_LANGUAGE_CODE},     // Line A
       'tax_query' => [
           [
               'taxonomy' => 'category',
               'field' => 'term_id',
               'terms' => $cat_today,
           ],
       ],

   ];
   echo '<pre>'; print_r($temp_args); echo '</pre>';
   $q = new WP_Query($temp_args);
   echo "Have posts: ";
   echo '<pre>'; print_r($q->have_posts()); echo '</pre>';
   if ($q->have_posts()) {
       while ($q->have_posts()) {
           $q->the_post();
           $post_type = strtolower(get_post_type());
           switch ($post_type) {
           }

       }
       wp_reset_postdata();
   }
   ?>
  

Я добавил строку #A, чтобы контролировать количество сообщений для определенной категории. Когда значение 'posts_per_page' => 0 , тогда отображается весь список сообщений для этой конкретной категории, и я не уверен, почему.

Формулировка проблемы:

Мне интересно, какие изменения я должен внести в приведенный выше php-код, когда 'posts_per_page' => 0 тогда он должен показывать нулевой пост.

Комментарии:

1. Если вы не хотите показывать какие-либо сообщения для категории, зачем вы ищете сообщения для этой категории? Просто не выполняйте поиск. Завершите поиск в блоке if.

2. @stevecomrie можете ли вы сообщить мне в ответе, что я должен сделать?

3. Почему бы не использовать 'category__not_in' в вашем исходном запросе?

4. Где вы хотите, чтобы я использовал 'category__not_in' ?

Ответ №1:

Это давняя ошибка в ядре WordPress. Смотрите тикет Trac #24142.

Вы можете просто убедиться, что оно больше 0 перед запуском кода, обернув все в оператор if:

 <?PHP
    if( $data->{"no_articles_".ICL_LANGUAGE_CODE} >= 1 ) {
        $temp_args = [
            'post_type' => array('current-channel', 'post', 'current-episodes'),
            'post_status' => 'publish',
            'orderby' => array(
                'feat_yes' => 'ASC',
                'post_type' => 'ASC',
                'date' => 'DESC'),
            'posts_per_page' => $data->{"no_articles_".ICL_LANGUAGE_CODE},     // Line A
            'tax_query' => [
                [
                    'taxonomy' => 'category',
                    'field' => 'term_id',
                    'terms' => $cat_today,
                ],
            ],

        ];
        echo '<pre>'; print_r($temp_args); echo '</pre>';
        $q = new WP_Query($temp_args);
        echo "Have posts: ";
        echo '<pre>'; print_r($q->have_posts()); echo '</pre>';
        if ($q->have_posts()) {
            while ($q->have_posts()) {
                $q->the_post();
                $post_type = strtolower(get_post_type());
                switch ($post_type) {
                    case 'current-episodes':
                        get_template_part('template-parts/content-search', 'video');
                        break;
                    case 'current-channel':
                        if (get_post_meta($post->ID, "current_portal_end_date_timestamp", true) > time()) {
                            echo "Hello World";
                            get_template_part('template-parts/content-search', 'channel');

                        }
                        break;
                    case 'post':
                        get_template_part('template-parts/content', 'search');
                        break;
                }

            }
            wp_reset_postdata();
        }
    }
?>