В WordPress есть возможность закреплять посты (sticky posts), чтобы они всегда отображались вверху списка записей на главной странице или в архиве. Иногда нужно быстро убрать все закрепленные посты, например, при смене стратегии контента или перед крупным обновлением сайта. В этой статье мы подробно рассмотрим, как найти и удалить все закрепленные посты в WordPress, используя как готовые плагины, так и собственный код.
Что такое закрепленные посты в WordPress и как их найти
Закрепленные посты — это записи, у которых в базе данных установлен специальный флаг, указывающий, что они должны отображаться вне очереди. Технически, WordPress хранит ID закрепленных постов в опции sticky_posts. Это массив с ID записей, которые будут выводиться первыми.
Чтобы посмотреть, какие посты закреплены, можно перейти в админке в раздел «Записи» и посмотреть, у каких постов стоит отметка «Закреплённый» (Sticky). Либо вывести список ID программно:
function wpload_get_sticky_posts() {
$sticky = get_option('sticky_posts');
return $sticky;
}
print_r(wpload_get_sticky_posts());Этот код выведет массив с ID закрепленных постов.
Как удалить закрепленные посты вручную через админку
Самый простой способ — зайти в раздел «Записи» и снять галочку «Закреплённый» у нужных постов. Но при большом количестве записей это неудобно и долго.
Поэтому для массового удаления закрепленных постов лучше использовать код или плагины.
Удаление всех закрепленных постов с помощью плагина
В репозитории WordPress нет специализированного плагина только для удаления sticky статусов, но есть универсальные плагины для массового редактирования записей, например:
- Bulk Edit Posts and Products in Spreadsheet — позволяет быстро редактировать метаданные и статусы постов через интерфейс таблицы.
- WP Sheet Editor — мощный редактор таблиц, где можно массово изменять флаги, включая закрепленность.
В таких плагинах можно отфильтровать закрепленные посты и снять с них галочку «Sticky». Но это всё же требует ручного поиска и действий.
Автоматическое удаление закрепленных постов через код: пример функции
Если вы разработчик или умеете добавлять код в functions.php темы или в свой плагин, можно написать функцию, которая удалит все закрепленные посты за один вызов.
Вот пример функции с приставкой wpload_:
function wpload_remove_all_sticky_posts() {
// Получаем массив ID закрепленных постов
$sticky = get_option('sticky_posts');
if (empty($sticky)) {
return 'Нет закрепленных постов для удаления.';
}
// Очищаем опцию sticky_posts
update_option('sticky_posts', []);
return 'Удалено закрепление у ' . count($sticky) . ' постов.';
}
// Вызов функции
// echo wpload_remove_all_sticky_posts();Эта функция читает текущие закрепленные посты, а затем обновляет опцию, обнуляя список. В результате ни один пост не будет считаться закрепленным.
Вы можете вызвать эту функцию один раз через админку, например, с помощью плагина Code Snippets или временно добавив вызов функции в functions.php.
Как добавить кнопку для удаления закрепленных постов в админке
Чтобы сделать процесс удобнее, можно добавить кнопку в панель администратора, по нажатию на которую будет удаляться закрепление у всех постов. Пример:
add_action('admin_menu', 'wpload_add_sticky_remover_page');
function wpload_add_sticky_remover_page() {
add_submenu_page(
'tools.php',
'Удалить закрепленные посты',
'Удалить закрепленные посты',
'manage_options',
'wpload-remove-sticky',
'wpload_render_remove_sticky_page'
);
}
function wpload_render_remove_sticky_page() {
if (isset($_POST['wpload_remove_sticky'])) {
$result = wpload_remove_all_sticky_posts();
echo '<div class="updated"><p>' . esc_html($result) . '</p></div>';
}
?>
<div class="wrap">
<h1>Удалить все закрепленные посты</h1>
<form method="post">
<input type="hidden" name="wpload_remove_sticky" value="1">
<p><input type="submit" class="button button-primary" value="Удалить закрепление у всех постов"></p>
</form>
</div>
<?php
}Этот код добавит в меню Инструменты новый пункт, где вы сможете одним кликом снять закрепление со всех постов. Это удобно и безопасно, так как вы контролируете процесс.
Проверка результата и последующие действия
После удаления закрепленных постов проверьте главную страницу и архивы — закрепление должно исчезнуть, и посты будут выводиться по дате публикации.
Если вам нужно закрепить другие посты, это можно сделать вручную или программно, установив массив sticky_posts с нужными ID.
Пример программного закрепления поста
function wpload_set_sticky_post($post_id) {
$sticky = get_option('sticky_posts');
if (!in_array($post_id, $sticky)) {
$sticky[] = $post_id;
update_option('sticky_posts', $sticky);
}
}
// Пример закрепления поста с ID 123
// wpload_set_sticky_post(123);Таким образом, вы можете гибко управлять закрепленными постами через код.
Выводы и рекомендации
Удаление всех закрепленных постов в WordPress — задача довольно частая, особенно при изменении дизайна или логики вывода записей. Самый надежный способ — работа с опцией sticky_posts, которую легко обновить программно.
Использование плагинов для массового редактирования тоже подходит, но требует дополнительной настройки. Добавление собственного кода и интерфейса в админку — оптимальный вариант для разработчиков и опытных администраторов.
Не забывайте делать резервные копии перед массовыми изменениями, чтобы избежать потери данных.