wpload.ru wordpress WPLoad.ru

Как удалить все закрепленные посты в WordPress: практическое руководство

В 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, которую легко обновить программно.

Использование плагинов для массового редактирования тоже подходит, но требует дополнительной настройки. Добавление собственного кода и интерфейса в админку — оптимальный вариант для разработчиков и опытных администраторов.

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

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше