Практический видеоурок по прилепленным постам вы можете найти здесь.
Очень часто люди, столкнувшись с необходимостью вывести какую-то определенную запись на блоге перед всеми остальными, обращаются к фрилансерам, не зная того, что такой функционал уже предусмотрен в WordPress по умолчанию.
Всё, что от нас потребуется, это отметить следующую опцию на странице редактирования записи:
Итак, поставили и сохранили. Теперь смотрите, пост будет выводиться перед остальными записями в следующих случаях:
На страницах рубрик и меток повышенный приоритет записей будет проигнорирован — там эта фишка не работает.
Если вы прилепите сразу несколько постов, то между собой они будут сортироваться по дате публикации.
IDы всех постов, у которых включена эта опция (как на скриншоте), сохраняются в базе данных в виде массива. Поэтому вывести только прилепленные посты не составит труда:
$params = array( 'posts_per_page' => -1, // нужно для отображения всех постов, без разделения по страницам 'post__in' => get_option( 'sticky_posts' ), // например Array ( [0] => 54 [1] => 1 ) ); $q = new WP_Query( $params ); while ($q->have_posts()) : $q->the_post(); // HTML-шаблон вывода поста endwhile; wp_reset_postdata();
Подробнее про параметры для WP_Query().
То есть в этом случае все записи будут выводиться как обычно — с сортировкой по дате.
На главной странице:
add_action( 'pre_get_posts', 'turn_off_sticky_on_homepage' ); function turn_off_sticky_on_homepage( $query ) { if ( !is_admin() && $query->is_main_query() ) { $query->set( 'ignore_sticky_posts', true ); } }
Только в дополнительных циклах внутри страниц:
add_action( 'pre_get_posts', 'turn_off_sticky_on_queries' ); function turn_off_sticky_on_queries( $query ) { if ( !is_admin() && !$query->is_main_query() ) { $query->set( 'ignore_sticky_posts', true ); } }
Везде абсолютно:
add_action( 'pre_get_posts', 'turn_off_sticky' ); function turn_off_sticky( $query ) { $query->set( 'ignore_sticky_posts', true ); }
В этом вам поможет функция post_class()
, потому что она добавляет для всех прилепленных постов класс sticky
(но только на главной странице).
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
После этого в CSS можно добавить что-нибудь в этом духе:
.sticky { color:#fe0000; }
Полезная вещь)
Почему-то не работает.
если можно, то конкретнее пожалуйста
Мда, я тоже не понял ничего, что куда вставлять, где что писать, пробывал писать в page.php. Можно ли более подробней описать куда вставлять php код. Или просто мне объяснить.....
первый код вставляем туда, где нужно вывести записи, все остальные коды - в functions.php
Привет! Я так понял, отключение повышенного приоритета для прилепленных записей, только в дополнительных циклах внутри страниц - это на странице когда было опубликовано сообщение, оно будет отображаться как обычное, так? Данный код не работает
Привет!
Уверены? Может быть параметр
ignore_sticky_posts
для$query->set
не робит. Попробуйте поменять его на другой, например наposts_per_page
и посмотрите, произошли ли изменения?А вообще, перед публикацией на сайте я тестирую весь код.
Прилепленное сообщение на 3-ей странице выводиться на главную, на самой же 3 -ей страницы сообщение не выводиться, как обычное, а отмечено как прилепленное.
Я хочу отключить отображение прилепленной записи, как прилепленное на 3, 4 и т.д. страницах. Я хочу, чтобы оно отображалось, как обычное, но выводилось на главную.
Поменял на posts_per_page изменений нет! Код "Отключение повышенного приоритета на главной странице" и "Везде абсолютно" отключают вывод прилепленной записи перед всеми остальными на главной, но на своей странице сообщение помечено, как прилепленное.
Потому что код не применяется у вас к той странице, к которой вы хотите. Возможно цикл через WP_Query.
Здравствуйте, а как сделать прикрепленную запись (Sticky Posts) для custom post type?
Добрый день!
К сожалению WordPress не поддерживает пока это. Есть некоторые плагины, но на мой взгляд они не очень, поэтому лучше делать через произвольные поля вручную.
Спасибо. Я так и думал. Решил просто уточнить у профи. Отличный сайт, уже много лет пользуюсь.
Спасибо 🙂 Рад, что мой сайт вам помогает.
Здравствуйте! Я сейчас изучаю Ваш курс "Создание темы вордпресс"
Столкнулся с такой проблемой: если в админке прилепить только 1 запись, то она не показывается большой. Более того, она и из маленьких пропадает.
А если прилепить, например, 3 записи, то 2 последние будут показываться большими, а первая все равно нет.
Добрый день!
То, что вы описываете, очень похоже на лишнее использование функции
the_post()
перед основным циклом.Действительно, почему-то стояла функция the_post() в самом начале, после get_header().
Все заработало, спасибо большое!
Всегда пожалуйста! 🙃