Быстрое удаление постов в WordPress без входа в админку

Как удалять записи wordpress без входа в админкуПокажу вам код, добавляющий в админ-бар удобную кнопку, позволяющую удалять записи wordpress без входа в админку сайта.

Зачем нужно удалять записи wordpress на фронтенде

Администратору сайта может понадобиться удалить просматриваемый им пост на сайте. Для этого ему нужно зайти в админку, найти там нужный пост и удалить. Это очень неудобно.

Просто добавьте этот код в файл functions.php вашего шаблона и в админ-баре у вас на сайте отобразится кнопка с иконкой корзины для быстрого удаления просматриваемого поста. Будет выдано окно для подтверждения вашего решения. После удаления поста вы окажетесь на странице 404 и можете спокойно закрыть вкладку браузера.

Изначально в WordPress такой кнопки нет. Почему они до сих пор её не сделали — непонятно. Ведь удобно же. Некоторые авторы шаблонов встраивают этот функционал в свои продукты, но не все.
В некоторых шаблонах, которые я использую на своих сайтах, таких кнопок нет.

Код кнопки в админ-баре для удаления поста

Я не являюсь программистом, поэтому код сгенерирован с помощью нейросетей. Мне оставалось лишь его проверить и протестировать.

/**
 * Добавляет ссылку "В корзину" в административную панель WordPress с иконкой.
 * 
 * @package Custom Admin Bar
 * @idea   Денис Иванов(aka Bahus, https://dendrblog.ru/neyroseti/bystroe-udalenie-postov-v-wordpress-bez-vhoda-v-adminku.html) — постановка задачи, концепция функционала
 * @generator Сгенерировано с помощью нейросетей
 * @testing Bahus — проверка, тестирование и внедрение в проект
 * @version 1.0
 * @license Public Domain — свободное использование без ограничений
 */

// Главная функция для добавления ссылки "Удалить пост" в верхнюю админ-панель WordPress
function bahus_add_trash_link_to_admin_bar() {
    global $wp_admin_bar;

    // Получаем текущий пост (объект WordPress)
    $post = get_queried_object();

    // Проверяем: объект должен быть постом, у него должен быть ID, и пользователь должен иметь право на удаление
    if (!is_a($post, 'WP_Post') || !isset($post->ID) || !current_user_can('delete_post', $post->ID)) {
        return; // Прерываем выполнение, если условия не выполнены
    }

    // Получаем ссылку на удаление поста
    $trash_url = get_delete_post_link($post->ID, '', true);

    // HTML-код заголовка с иконкой "корзина"
    $title = '<i class="fas fa-trash-alt ab-icon"></i>' . __('Отправить пост в корзину', 'text-domain');

    // Разрешаем только теги <i> с атрибутом class — для безопасности
    $allowed_html = array(
        'i' => array(
            'class' => true,
        ),
    );

    // Добавляем элемент меню в админ-бар
    $wp_admin_bar->add_menu(array(
        'id'    => 'bahus-move-to-trash', // Уникальный ID меню
        'title' => wp_kses($title, $allowed_html), // Заголовок с фильтрацией HTML
        'href'  => $trash_url, // Ссылка на удаление поста
        'meta'  => array(
            'class'   => 'bahus-move-to-trash',
            'title'   => __('Переместить в корзину', 'text-domain'), // Тултип
            'onclick' => 'return confirm("Вы уверены, что хотите переместить этот пост в корзину?");', // Подтверждение удаления
        ),
    ));
}

// Подключаем функцию к хуку 'admin_bar_menu' с высоким приоритетом (9999),
// чтобы элемент оказался в конце меню
add_action('admin_bar_menu', 'bahus_add_trash_link_to_admin_bar', 9999);

// Функция для подключения иконок Font Awesome 6.7.2 через CDN
function bahus_enqueue_font_awesome() {
    wp_enqueue_style(
        'bahus-font-awesome', // Уникальный хендлер
        'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css', // CDN-ссылка
        array(), // Зависимости
        '6.7.2', // Версия
        'all' // Медиа-тип
    );
}

// Подключаем Font Awesome и на фронтенде, и в админке
add_action('wp_enqueue_scripts', 'bahus_enqueue_font_awesome');
add_action('admin_enqueue_scripts', 'bahus_enqueue_font_awesome');

// Добавляем CSS-стили для иконки "корзина" в админ-панели
function bahus_custom_admin_bar_styles() {
    echo '<style type="text/css">
        /* Стили для иконки корзины в верхнем меню */
        #wpadminbar #wp-admin-bar-bahus-move-to-trash .ab-item .fas.fa-trash-alt.ab-icon {
            color: #ffffff !important;
            vertical-align: middle !important;
            margin-right: 5px !important;
            font-size: 16px !important;
            display: inline-block !important;
            font-family: "Font Awesome 6 Free" !important;
        }

        /* Выравнивание текста и иконки по центру */
        #wpadminbar #wp-admin-bar-bahus-move-to-trash .ab-item {
            display: flex !important;
            align-items: center !important;
        }
    </style>';
}

// Подключаем стили в head сайта и админки
add_action('wp_head', 'bahus_custom_admin_bar_styles');
add_action('admin_head', 'bahus_custom_admin_bar_styles');

// Конец кода добавления ссылки на удаление материала

Как использовать код

Элементарно, Ватсон! Добавьте этот код в файл functions.php вашей темы.

Интересно:
Arjuna — wordpress theme. Полный русский перевод

Совет: не редактируйте оригинальные файлы шаблона, потому что при обновлении темы все внесённые изменения будут перезаписаны и при каждой новой версии вам придётся добавлять код заново. Используйте дочернюю тему (child theme) и вставляйте код в её functions.php, а не родительский. Тогда при обновлении шаблона ничего не затрётся.

Можете сделать этот код в виде плагина и установить плагин на сайт. Этот вариант более удобен при массовом размещении кода.

Результат

Теперь, когда вы залогинены на сайте, можете легко удалять записи wordpress при просмотре какого-либо поста на фронтенде. Просто нажимаете кнопку удаления в админ-баре и подтверждаете своё решение.

Всё, пост удалён. Быстро и удобно.

Поделиться с друзьями

С уважением Денис Иванов, автор блога dendrblog.ru

Интересно:
Топ 10 ошибок новичков в нейросетях и как их избежать

Обновления блога

Никакого спама никогда не будет. Только оповещения о выходе новых материалов на блоге.

Оцените статью
( Пока оценок нет )
Добавить комментарий

Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.