Скрываем статью с главной страницы и не только

Не знал, что актуально скрыть статью с главной страницы. А нет, оказывается актуально для блогеров статейщиков. Скрывая записи с лены на главной страницы они, вроде как, не дают простым пользователям просматривать проходные статьи. Спорный момент…

Так вот. Как сие реализовать? Очень просто. можно конечно воспользоваться плагином, но это не наш метод. Мы ведь не ищем легких путей?! Итак, самый простой вариант использовать произвольные поля (метабоксы).

к содержанию

Создаем нужное поле

Для создания поля будем использовать плагин Advanced Custom Fields. Функционала бесплатной версии более чем достаточно. Прежде чем создать поле, требуется создать группу полей

Создаем группу полей в ACF

Затем уже в группе создать поле

Добавляем поле

И заполнить нужные поля

Заполняем нужные поля

Тип поля выбираем Истина/Ложь. По окончании заполнения полей не забываем нажать кнопку Обновить

к содержанию

Магия хука pre_get_posts

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

Скрываем запись с главной

Чтобы скрыть только с главной используем условный тег is_home и нужная функция будет выглядеть так

// скрываем помеченные посты с главной
function art_exclude_posts($query) {
	if (is_admin())
	 return $query;

	$exclude = array();
	if ( $query->is_main_query() && (is_home()) ) { // здесь добавляем нужные уcловные теги
			$posts = get_posts(array(
				'post_type' => 'post',
				'meta_query' => array(
					array(
						'key' => 'art_exclude_home', // название поля
						'value' => '1',
						'compare' => '=',
					),
				),
			));
			foreach($posts as $hide) {
				$exclude[] = $hide->ID;
			}
			$query->set('post__not_in', $exclude);
		}
	return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );

Добавьте сей код в файл function.php

к содержанию

Скрываем запись с главной и страницы архивов

Чтобы убрать еще из ленты рубрик воспользуемся тегом is_archive и получим

// скрываем помеченные посты с главной
function art_exclude_posts($query) {
	if (is_admin())
	 return $query;

	$exclude = array();
	if ( $query->is_main_query() && (is_home() || is_archive() ) ) { // здесь добавляем нужные уcловные теги
			$posts = get_posts(array(
				'post_type' => 'post',
				'meta_query' => array(
					array(
						'key' => 'art_exclude_home', // название поля
						'value' => '1',
						'compare' => '=',
					),
				),
			));
			foreach($posts as $hide) {
				$exclude[] = $hide->ID;
			}
			$query->set('post__not_in', $exclude);
		}
	return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );
к содержанию

Скрываем запись с главной страницы, страницы архивов и RSS

Так как при публикации запись отправляется в RSS-ленту, то чтобы полноценно скрыть воспользуемся тегом is_feed. Получим такой код

// скрываем помеченные посты с главной
function art_exclude_posts($query) {
	if (is_admin())
	 return $query;

	$exclude = array();
	if ( $query->is_main_query() && (is_home() || is_archive() || is_feed()) ) { // здесь добавляем нужные уcловные теги
			$posts = get_posts(array(
				'post_type' => 'post',
				'meta_query' => array(
					array(
						'key' => 'art_exclude_home', // название поля
						'value' => '1',
						'compare' => '=',
					),
				),
			));
			foreach($posts as $hide) {
				$exclude[] = $hide->ID;
			}
			$query->set('post__not_in', $exclude);
		}
	return $query;
}
add_filter( 'pre_get_posts', 'art_exclude_posts' );

Вот и все:) Более подробно в видео

П.С. Задавайте вопросы в комментариях и не забывайте подписываться на канал WPRUSe

21 комментариев
  • Сергей

    30.05.2016

    Никогда не заморачивался скрытием контента с главной. Вот если выйти на динамику в несколько статей в день, тогда, возможно, это и имело бы смысл. А так — пусть читатели смотрят все статьи. Я, например, просматривая другие блоги, смотрю всегда главную ленту, не заходя в рубрики. А ведь могу в этом случае пропустить что-то интересное…

    • Артем

      30.05.2016

      Как раз для статейников такое и применяется, когда публикуется много проходных статей для поисковиков

  • Дмитрий

    04.06.2016

    Прикольно, Артем.
    только, как понимаю, это лучше делать через дочернюю тему. Иначе все настройки слетят при обновлении темы.

    • Артем

      04.06.2016

      Необязательно, если функцию выносить в отдельный плагин, то и дочерки не понадобятся.

  • Игорь

    02.10.2016

    Артем, а как убрать с главной определенные рубрики?

    • Артем

      02.10.2016

      В смысле рубрики? На главной нет рубрик обычно, только статьи из разных рубрик

  • Игорь

    02.10.2016

    Скрывать статьи определенных рубрик

    • Артем

      02.10.2016

      Дак вы и скрываете данным способом. Тут с рубриками связи никакой

  • Игорь

    02.10.2016

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

    • Артем

      02.10.2016

      Понятно. Не понятно только зачем их вообще скрывать, но вам виднее. Как вариант — сделать статическую главную и на ней выводить нужные записи или через pre_get_post фильтровать именно рубрики, но это сложнее, проще плагин подобрать

  • Игорь

    02.10.2016

    Я думал сделать статистическую страницу, но у меня тяму не хватает как ее оформить красиво. Да и в инете примеров не нашел. Мне нравится как у этих товарищей сделано _http://avovkdesign.com

    • Артем

      02.10.2016

      Самый простой вариант выводить по 4-5 анонсов статей из каждой рубрики

  • Игорь

    02.10.2016

    А как это сделать? Но две рубрики хочу исключить.

    • Артем

      03.10.2016

      Если без кода, то можно использовать плагин Shortcode Ultimate

      • Игорь

        03.10.2016

        Хотелось бы конечно кодом, может напишите статью?

        • Артем

          03.10.2016

          Хорошо, могу даже видео записать) Но не сразу

  • Игорь

    03.10.2016

    Буду ждать и пока пользовать старый шаблон, только вы не затягивайте )) В инете малот информации на эту тему.

  • Мастер

    25.03.2017

    Интересная статья, не задумывался даже, чтоб скрывать статьи на главной странице. Честно даже и не знал, возьму на заметку данную информацию.

    • Артем

      27.03.2017

      Некоторым надо, зачем не знаю)

  • Специалист

    05.05.2017

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *
php js HTML CSS Code