Содержание статьи
Размещайте временные анонсы вверху ленты, не меняя даты публикации. Это удобно, если вы работаете с расписанием мероприятий или хотите подчеркнуть сезонные предложения. Используйте фильтр pre_get_posts
, чтобы переопределить порядок выборки и вынести нужный элемент вверх без изменения хронологии.
Пример:
function reorder_sticky($query) {
if ($query->is_home() && $query->is_main_query()) {
$stickies = get_option(\'sticky_posts\');
$query->set(\'post__in\', $stickies);
$query->set(\'orderby\', \'post__in\');
}
}
add_action(\'pre_get_posts\', \'reorder_sticky\');
Что делать, если вам нужно прикрепить контент к конкретным категориям, а не только к общей ленте? Решение – использовать мета-поля и кастомные WP_Query. Не надейтесь на стандартное поведение, оно ограничено – создайте свою логику.
Важно: стандартный флаг sticky не работает в пользовательских типах записей и таксономиях – потребуется написать собственный механизм фиксации.
Или другой сценарий – имитация системы приоритетов. Присвойте разным записям вес, сохраните в мета-поле priority_level
и сортируйте вручную:
$args = array(
\'meta_key\' => \'priority_level\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\'
);
$query = new WP_Query($args);
Помните! Поведение \»закрепленного\» материала не распространяется на виджеты, архивы, REST API – вам придётся настраивать всё отдельно.
Хотите ограничить срок показа? Установите дату окончания через кастомное поле pin_expiration
, проверьте её при рендере ленты – и автоматически убирайте при наступлении срока. Автоматизация на кроне или WP-Cron, здесь подойдёт хук wp_schedule_event
.
Как использовать прилепленные записи для временного отображения срочных объявлений
Задача: вывести краткосрочное сообщение в самом верху главной ленты. Решение – пометить нужный пост флагом sticky
, задать срок действия и автоматически убрать его по истечении времени.
Нет встроенной логики удаления прикреплённого статуса по таймеру. Это требует вмешательства через хук init
и проверку даты. Пример:
function remove_expired_sticky() {
$expired = get_option(\'expired_sticky_ids\', []);
$now = current_time(\'timestamp\');
$posts = get_option(\'sticky_posts\');
foreach ($posts as $post_id) {
$expire = get_post_meta($post_id, \'_sticky_until\', true);
if ($expire && $now > strtotime($expire)) {
unset($posts[array_search($post_id, $posts)]);
$expired[] = $post_id;
}
}
update_option(\'sticky_posts\', $posts);
update_option(\'expired_sticky_ids\', $expired);
}
add_action(\'init\', \'remove_expired_sticky\');
Чтобы задать срок, добавляйте дату окончания в пользовательское поле _sticky_until
при редактировании материала. Формат: YYYY-MM-DD
.
Внимание! Без крон-задач код не выполнится точно в срок. Обновление произойдет только при следующем визите пользователя.
Для автоматического добавления метки можно использовать ACF или создать отдельную метабокс-панель. Не полагайтесь на ручной ввод – человеческий фактор беспощаден.
Подключите уведомление на фронте. Не в заголовке, а вверху контентной части. Например:
if (is_sticky() && strtotime(get_post_meta(get_the_ID(), \'_sticky_until\', true)) > time()) {
echo \'<div class=\"urgent-message\">Срочное объявление: \' . get_the_title() . \'</div>\';
}
Такие публикации должны быть лаконичными. Без превью, без комментариев. Просто факт. Информация. Уведомление.
Важно помнить: такие материалы лучше исключить из стандартной RSS-ленты. Используйте фильтр
pre_get_posts
и отключайте показ по условиюis_feed()
.
Добавьте визуальный акцент. Красный фон, фиксированное положение, анимация – что угодно, лишь бы сразу бросалось в глаза. Иначе – мимо цели.
Срок жизни – от силы 24 часа. После – в архив. Механически. Без сантиментов.
Эта техника – как выстрел. Моментально. Ярко. Потом – тишина.
Организация контентных подборок с помощью прилепленных записей в блоге
Закрепите посты с тематическими дайджестами. Это не только структура, но и навигационный якорь для читателя. Один пост – одна подборка. Один тег – один маршрут.
Выведите такие записи в начале ленты:
<?php
$sticky = get_option(\'sticky_posts\');
$query = new WP_Query(array(
\'post__in\' => $sticky,
\'ignore_sticky_posts\' => 1,
\'orderby\' => \'date\',
\'posts_per_page\' => -1
));
while ($query->have_posts()) : $query->the_post();
the_title(\'<h3>\', \'</h3>\');
the_excerpt();
endwhile;
wp_reset_postdata();
?>
Важно! Подключайте
ignore_sticky_posts => 1
только во втором запросе. Иначе избранные дублируются и рушат верстку.
Работает даже в кастомных шаблонах: page-featured.php
для главной, archive-collection.php
для рубрик. Главное – задать условие показа и не включать их в глобальный луп.
Их можно подменить динамически через pre_get_posts
:
add_action(\'pre_get_posts\', function($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set(\'post__in\', get_option(\'sticky_posts\'));
$query->set(\'ignore_sticky_posts\', 1);
}
});
Помните! Список закрепленных постов ограничен в админке. Массовое назначение приведет к хаосу. Оптимально – не более 5–7 ключевых материалов.
Сочетайте с category__in
или tag__in
для точечной фильтрации. Пример: подборка кейсов по UX, списки шаблонов, руководства по безопасности. Никаких плагинов. Чистый код. Полный контроль.
Функция get_option(\'sticky_posts\')
возвращает массив ID. Работайте с ним напрямую. Не пытайтесь переопределить через метаполя. Ошибка архитектуры.
Читатель получает компактную точку входа. Вы – управляемую витрину. Удобно? Очень. Эффективно? На 100%.
Использование прилепленных записей для навигации по ключевым разделам сайта
Закрепите посты с ссылками на главные рубрики – меню не всегда достаточно. Пример: закрепленный элемент с ссылкой на страницу «Часто задаваемые вопросы» экономит клики и снижает показатель отказов.
Применяйте фильтр pre_get_posts
для точечной настройки отображения в нужных зонах, например, только на главной:
function highlight_sections( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( \'ignore_sticky_posts\', false );
$query->set( \'posts_per_page\', 5 );
}
}
add_action( \'pre_get_posts\', \'highlight_sections\' );
Оформление должно привлекать взгляд. Замените стандартный маркер значком. Иконка – быстрее текста. Используйте SVG или Webfont, не PNG. Лишние запросы убивают скорость.
Внимание! Не мешайте закреплённые записи с обычными. Это сбивает пользователя. Выделяйте их визуально или размещайте в отдельной зоне, выше ленты.
Не используйте дату – они не должны устаревать. Замените на CTA: «Узнай, как начать» или «См. все категории».
Выведите закреплённые объекты отдельным циклом и поместите его в нужное место темы. Пример:
$args = array(
\'posts_per_page\' => 3,
\'post__in\' => get_option( \'sticky_posts\' ),
\'ignore_sticky_posts\' => 1
);
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
get_template_part( \'template-parts/highlight\', get_post_format() );
endwhile;
wp_reset_postdata();
Если всё свалено в кучу – теряется логика. Разбивайте по темам. Для каждого раздела – свой закреп. Например, в категории «Обучение» отображайте ссылку на базовые материалы, в «Услугах» – на калькулятор стоимости.
Важно помнить: закреплённые публикации – это не баннер. Это интерфейс. Убивайте клики, добавляйте смысл, режьте шум.
Нужно, чтобы пользователь щёлкнул один раз – и оказался там, где вы хотите. Бейте прямо в цель.
Контроль, контекст, кликабельность. Без этих трёх – смысла нет. Всё остальное – украшения.