Seo-Бизнес блог Progress-project

Все о создании, продвижении сайтов и заработке в интернете

Обновлённый дизайн блога Progress-project
logotip «Progress-project»
logotip «Progress-project»

Pre_get_posts — важное событие в WordPress

Приветствую вас уважаемые читатели «Progress-project», сегодня мы с вами затронем немного не обычную тему дополнительных настроек в WP, через: pre_get_posts — события.

Так называемый хук — pre_get_posts событий, работает на основе класса: WP_Query получающего из базы-данных контент к той или иной странички либо записи.

В каких случаях нам может быть полезным применения на своём сайте событие: pre_get_posts?
Наверняка вы уже не раз замечали, что на достаточно многих вполне солидных и уже имеющих в своём арсенале по несколько сот записей, на главной страничке всё также «по детски» отображается всего пять анонсов к последним постам.

А делается это ради увеличения скорости загрузки ресурса. Меньше выводимого контента, меньше обращений к БД, думаю здесь всё всем понятно.
Пусть даже это и не совсем большая экономия но всё же.

Мы же с вами сегодня благодаря событием: «pre_get_posts» пойдём немного другим путём!
Например на главной странице «Прогресс-проект» — abrek-ad-abra.ru у меня отображается десять анонсов к последним опубликованным постам, что на мой взгляд является более привлекательным. А вот если открыть какую либо рубрику то в ней уже будет выведено только пять анонсов и всё это организованно благодаря именно «pre_get_posts» событием.

Вывод разного количество анонсов к постам на страницах WP

Первым делом нам с вами необходимо определиться с основными настройками вывода общего количества анонсов на главной страничке ресурса.
Делается это в административной панели по адресу: «Настройки» далее: «Чтение» и: «На страницах блога отображать не более», указываем необходимое количество анонсов и сохраняем настройки.

После этого мы с вами уже можем перейти непосредственно к более точной настройки с помощью хука событий pre_get_posts.

Открываем файл действующей темы: functions.php и вставляем в него такую функцию:

function Progress_paged( $query ) {
 if ($query->is_main_query())
 $query->set( 'posts_per_page', 10);
 if ($query->is_archive())
 $query->set( 'posts_per_page', 5);
}
add_action( 'pre_get_posts', 'Progress_paged');

При необходимости меняем значения pre_get_posts на свои.
Конечно тема событий pre_get_posts достаточно широка, мы же сегодня поговорим с вами только о некоторых моментах которые в дальнейшем вам могут пригодиться в тех или иных случаях ведения блога.

Исключаем из рубрики отображение определённой статьи

Например у вас на блоге имеется какая либо категория (рубрика) и её id будет 16 а в ней уже есть пост отображение которого вы бы хотели скрыть, id этого поста например будет являться цифра 22.
Чтобы нам исключить из рубрики имеющий id 16 пост с id 22 в файле действующей темы: functions.php вставляем функцию:

function Progress_post_exclude($query){
 if ($query->is_category(16))
 $query->set('post__not_in', array(22));
}
add_action('pre_get_posts','Progress_post_exclude');

В этом случае пост не будет показываться в категории но останется в архиве а так же на страничках основной пагинацией. Думаю, что понятно, если сказать проще то мы попросту указали, что при открытии посетителем рубрики с id 16, статью с id 22 в ней не показывать, думаю теперь понятно точно всем.

Если нужно скрыть оптом и отовсюду сразу несколько постов, используем следующий вариант события pre_get_posts:

function Progress_post_exclude($query){
 if ($query->is_main_query() or $query->is_archive())
 $query->set('post__not_in', array(44,65,92));
}
add_action('pre_get_posts','Progress_post_exclude');

Указав, через запятую id записей подлежащих скрытию, в нашем случае это: 44,65,92.
Как видите скрыть запись с помощью хука — pre_get_posts не составляет особого труда.
Но, что же нам с вами делать если необходимо убрать из основной рубрики какую либо её под — рубрику?

Убираем из основной рубрики под — рубрику

Представим, что на «Прогресс-проект» есть рубрика: «Wordpress» с id 12, нам необходимо скрыть от отображения её под — рубрику, допустим: «Плагины» с id 40, в этом случае применяем вот такой вариант:

function Progress_category_exclude($query){
 if ($query->is_category(12)) 
 $query->set ('cat', '-40');
}
add_action('pre_get_posts','Progress_category_exclude');

Обращаю ваше внимание, что тире спереди id исключаемой под рубрики имеет ключевое значение.

То же самое проделываем и в случае скрытия сразу нескольких под категорий (рубрик):

function Progress_category_exclude($query){
 if ($query->is_category(10)) 
 $query->set ('cat', '-10,-15,-20');
}
add_action('pre_get_posts','Progress_category_exclude');

Теперь давайте снова вернёмся к настройкам главной странице нашего WP — блога.

Вывод анонсов определённой категории на главной

Если вам нужно, чтобы на главной странички вашего сайта или блога вместо последних опубликованных постов выводились анонсы из какой либо категории, применяем такой приём pre_get_posts события:

function Progress_category_home($query){
 if (is_home()) 
 $query->set ('cat', '62');
} 
add_action('pre_get_posts','Progress_category_home');

Цифру: 62 в коде функции заменяем на id нужной категории (рубрики).

Дальше мы с вами ещё не раз вернёмся к этой теме, поэтому подпишитесь на обновления, а я на этом с вами прощаюсь желаю всего доброго, до новых встреч!

С уважением, автор блога!
© progress-project
★Обновлено:2016-05-19

Введите свой e-mail:

Вы можете поделиться статьёй в социальных сетях:

Комментарии к статье

2 комментарияна “Pre_get_posts — важное событие в WordPress”
  1. Андрей:

    Да, событие полезное, подтверждаю!

    Ответить
    • Administrator:

      Да Андрей конечно полезное, иначе я просто не стал бы тратить на него не своё не ваше время.

      Ответить

Ваш комментарий

Внимание! Перед тем, как вставить в комментарий: html, php либо JavaScript, преобразуйте его в HTML сущность!

» Подписаться на комментарии по RSS
Поиск по блогу

Введите свой e-mail:

ВКонтакте Google+ Facebook RSS-лента сайта abrek-ad-abra.ru

Топ комментаторов

Виктор(6)
seoonly(4)
Николай(3)
Олег(3)
Иван(3)

© 2015-2017

SEO-Бизнес блог «Progress-project».

Все материалы, опубликованные на сайте: принадлежат автору и охраняются в соответствии с законодательством РФ.

При использовании материалов сайта гиперссылка на обязательна!



seo-блог