Intereting Posts

pre_get_posts и страница блога

Я пытаюсь правильно настроить свою новую тему. Я создал пользовательскую домашнюю страницу для моей новой темы под названием «template-home.php», а затем создал страницу «блог». Я пошел в настройки и изменил настройки «Чтение» на «Статическая страница», и я установил свою первую страницу в свой домашний шаблон, а затем установил страницу «Сообщения» на «блог». Я не назначал настраиваемый шаблон для этой страницы. Насколько я понимаю, файл index.php будет использоваться для получения этих сообщений. Я пытаюсь использовать is_page() и is_category() чтобы сказать, что если это страница блога, то получите сообщения в блоге. Я надеялся, что при первом включении темы все сообщения будут отображаться на первой странице, но если бы я посетил страницу блога, условные условия могли бы наступить и получить только сообщения на странице блога. Я думал, что смогу выполнить эту задачу, используя этот код

 add_action( 'pre_get_posts', 'blog_query'); function blog_query( $query ){ if ( $query->is_page('blog') ) { $query->set( 'category_name', 'blog' ); } } 

Это не работает. Это дает мне ошибку на первой странице «Попытка получить свойство не объекта». Я просто не знаю, какой метод использовать для настройки страницы блога. Должен ли я установить для него настраиваемый шаблон и позволить индексной странице получить все сообщения или попробовать использовать pre_get_posts ?

Ваш ввод приветствуется.

Solutions Collecting From Web of "pre_get_posts и страница блога"

Ваша страница блога на самом деле является вашей домашней страницей, поэтому вам нужно использовать is_home() . Для статической главной is_front_page() будет использоваться is_front_page()

РЕДАКТИРОВАТЬ

Извините за запутанность :-). Это работает, когда статическая страница

Страница, установленная в качестве вашей главной страницы, является actaully просто титульной страницей. Когда вы думаете о книге, это страница, которая расскажет читателю, что такое книга. Страница, используемая здесь, будет настраиваться пользователем. Правильное именование должно быть front-page.php, но любой шаблон страницы будет делать. Правильный условный тег, который будет использоваться здесь, будет is_front_page()

Теперь, страница блога, независимо от того, установлен ли она явно или нет, будет либо использовать home.php, а если она недоступна, будет использоваться index.php. Немногие знают об этом, но это рассматривается как страница вашего сайта, обычная страница индекса, которую вы увидите, когда статическая страница не установлена. Чтобы настроить таргетинг на свою страницу в блоге, вам необходимо использовать is_home() проверку is_home() . Удивительно, но факт

Чтобы ограничить свою страницу только одной категорией, используйте pre_get_posts как и вы, просто измените свой условный тег в соответствии с

 function only_one_cat_blogpage($query) { if( !is_admin() && $query->is_home() && $query->is_main_query() ){ $query->set( 'cat', 'ID OF CATEGORY' ); } } add_action( 'pre_get_posts', 'only_one_cat_blogpage' ); 

EDIT 2

Для дальнейшего чтения, проверьте

  • Создание статической передней страницы

Попробуй это. Как упоминалось Pieter, вам нужно будет проверить is_home() и установить условия соответственно.

 function show_category_posts( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'category_name', 'blog' ); } } add_action( 'pre_get_posts', 'show_category_posts' );