Функция pre_get_posts()
-
Есть тестовый сайт с двумя рубриками: «Черновики» (по умолчанию для новых постов, ID рубрики = 1) и «Общее» (ID=2).
Нужно: скрыть отображение рубрики с ID=1 во всех стандартных отображениях WP (главная, виджет Рубрики, календарь, поиск, архивы, rss и проч). Я понимаю, что прямая ссылка будет работать, вопрос не в этом, нужно скрыть отображение.
Гугление дает печальные результаты, все сводится либо к ковырянию кода ядра, либо к изменению всех php страниц темы оформления, отвечающих за это, или к установке плагина Advanced Category Excluder (который не обновлялся 3 года и беглый анализ кода которого показывает, что скорее всего он просто подменяет стандартные php ядра на свои такие-же отредактированные):
http://moi-start.ru/kak-skryt-ubrat-rubriki-categories-wordpress.html/
http://www.websoldier.ru/kak-skryt-rubriku-v-wordpress-advanced-category-excluder.html
Полазив более основательно, нашел это:
http://wp-kama.ru/hook/pre_get_posts
Все примеры нормально работают, например этот (добавляя в конец functions.php текущей темы оформления — посты с главной с этой рубрикой пропадают):
function exclude_category( $query ) { if ( $query->is_front_page() && $query->is_main_query() ) { $query->set( 'cat', '-1' ); } } add_action( 'pre_get_posts', 'exclude_category' );
попробовал пока несколько, очевидно, что скрытость определяется наличием одного из параметров:
$query->is_404 $query->is_admin $query->is_archive $query->is_attachment $query->is_author $query->is_category $query->is_comments_popup $query->is_comment_feed $query->is_date $query->is_day $query->is_feed $query->is_home $query->is_month $query->is_page $query->is_paged $query->is_posts_page $query->is_post_type_archive $query->is_preview $query->is_robots $query->is_search $query->is_single $query->is_singular $query->is_tag $query->is_tax $query->is_time $query->is_trackback $query->is_year
Вопрос:
Благодаря набору параметров (выше) вроде удалось убрать отовсюду, кроме виджета Категории. Там по прежнему рубрику видно. Не могли бы дать пример кода, который уберет рубрику «всамомделишным» способом везде (что-то типа «$query->is_all»)?
Спасибо.
- Тема «Функция pre_get_posts()» закрыта для новых ответов.