• Добрый день! Перед циклом, в архиве (категории) ставлю query_posts( ‘post_status=publish’ ); или с помощью WP_Query, для вывода в категориях только постов, с определенным статусом, но почему-то на всех категориях выводятся только последние посты данного статуса и не работает навигация. Подскажите пожалуйста почему это так происходит и возможно ли как-то поправить? Спасибо

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • 
    function only_draft( $query ) {
    	if ( !is_admin() && $query->is_main_query() ) {
    		$query->set( 'post_status', 'draft' );
    	}
    }
    add_action( 'pre_get_posts', 'only_draft' );
    

    этот код выведет только черновики. используйте там is_category, если надо.

    Что-то этот код не работает
    Всеравно выводятся все посты

    этот код надо добавить в functions.php

    ок да работает, но проблема в том, что еще нужно чтобы сами посты открывались, но не было их не в категориях, тегах

    и в чем проблема?

    не много доделал, но при переходе по посту, отличного от статуса publish — пишит страница не найдена
    function only_publish( $query ) {
    if ( !is_category() && $query->is_main_query() ) {
    $query->set( ‘post_status’, ‘publish’ );
    }
    }
    add_action( ‘pre_get_posts’, ‘only_publish’ );

    Все, вроде сделал, так правильно???
    function only_draft( $query ) {
    if ( is_category( $category ) && $query->is_main_query() ) {
    $query->set( ‘post_status’, ‘publish’ );
    }
    }
    add_action( ‘pre_get_posts’, ‘only_draft’ );

    во-первых, что у вас в $category?
    во-вторых, что в итоге вы хотите получить то?

    по умолчанию черновики и «на утверждении» не выводятся.
    поэтому 404 ошибка вполне закономерна.

    Что-то я уже запутался, в категориях необходимо вывести только посты, которые были опубликованные со статусом publish соответственно.
    Но я добавляю к некоторым постам свой статус новый, отдельным скриптом.
    При этом, эти посты с новым статусом должны открываться по своему URL но, обязательно их не должно быть в категориях и тегах.

    Я не пойму как это сделать

    что-то вы меня запутали. вот код:

    
    function only_draft( $query ) {
    	if ( !is_admin() && is_category() && $query->is_main_query() ) {
    		$query->set( 'post_status', 'publish' );
    	}
    }
    add_action( 'pre_get_posts', 'only_draft' );
    
    function my_custom_post_status(){
    	register_post_status( 'unread', array(
    		'label'                     => _x( 'Unread', 'post' ),
    		'public'                    => true,
    		'exclude_from_search'       => false,
    		'show_in_admin_all_list'    => true,
    		'show_in_admin_status_list' => true,
    		'label_count'               => _n_noop( 'Unread <span class="count">(%s)</span>', 'Unread <span class="count">(%s)</span>' ),
    	) );
    }
    add_action( 'init', 'my_custom_post_status' );
    

    он регистрирует статус «unread», затем выводит в рубриках только записи со статусом «publish», но при этом сама запись со статусом «unread» открывается с главной страницы например.

    Модератор Юрій

    (@yube)

    Но я добавляю к некоторым постам свой статус новый,

    Если речь о поле post_status, то к нему нельзя что-то добавить, можно только изменить значение на другое. По крайней мере, без радикальной переделки движка.

    Да, спасибо, теперь всё понятно и правильно работает.
    Но вопрос, зачем в условии стоит !is_admin — его убрать можно?
    И можно ли добавить еще условие к примеру: is_search() — это будет нормально?
    Спасибо!

    Если речь о поле post_status, то к нему нельзя что-то добавить, можно только изменить значение на другое. По крайней мере, без радикальной переделки движка.

    Да, извиняюсь, изменить статус…

    • Ответ изменён 7 лет, 9 месяцев назад пользователем yura555.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    зачем в условии стоит !is_admin — его убрать можно?

    Чтобы условие срабатывало только на внешней части сайта, а не в админке.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Вывод постов с определенным статусом» закрыта для новых ответов.