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

Быстрое удаление постов в WordPress без входа в админку 2.0Недавно я опубликовал пост о быстром удалении постов в WordPress без входа в админку. Сегодня хочу вам показать вторую доработанную версию кода.

Код так же, как и прошлый создан с помощью нейросетей.

Отличия кода 2.0 от первой версии

От первой версии обновлённый код имеет следующие отличия:

  1. Добавлена функция вставки ссылки на удаление в виде корзины на главную страницу после каждого заголовка поста.
  2. В код добавлена настройка, позволяющая отключить функцию вывода ссылок для удаления на главной странице сайта. Ссылка в админ-баре остаётся.

На некоторых шаблонах код ломает вёрстку главной страницы. Заголовки и ссылка на удаление работают корректно. Позже постараюсь этот баг исправить.
Если на вашем шаблоне сломалась верстка, напишите плз в комментариях название вашего шаблона и по возможности скиньте код блока новости на главной для анализа. Его можно разместить на сайте pastebin.com, добавив в свой комментарий ссылку на страницу с кодом.

Код удаляет посты без перемещения его в корзину. Будьте внимательнее. Восстановить посты не получится.

Код добавления ссылок на удаление постов v 2.0

/**
 * Добавляет ссылку "В корзину" в административную панель WordPress и панель удаления под каждым заголовка каждой новости на главной.
 * 
 * @package Custom Admin Bar
 * @idea   Денис Иванов(aka Bahus, https://dendrblog.ru)
 * @generator Сгенерировано с помощью нейросетей
 * @testing Bahus — проверка, тестирование и внедрение в проект
 * @version 2.0
 * @license Public Domain — свободное использование без ограничений
 */

// -----------------------------------------------------------------------------
// Настройка: отключить фронтальную панель
define('BPF_DISABLE_FRONT_PANEL', false); // true — отключить панель на главной странице

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

    $post = get_queried_object();

    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);

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

    $allowed_html = array(
        'i' => array(
            'class' => true,
        ),
    );

    $wp_admin_bar->add_menu(array(
        'id'    => 'bahus-move-to-trash',
        'title' => wp_kses($title, $allowed_html),
        'href'  => $trash_url,
        'meta'  => array(
            'class'   => 'bahus-move-to-trash',
            'title'   => __('Переместить в корзину', 'text-domain'),
            'onclick' => 'return confirm("Вы уверены, что хотите переместить этот пост в корзину?");',
        ),
    ));
}
add_action('admin_bar_menu', 'bahus_add_trash_link_to_admin_bar', 9999);

// -----------------------------------------------------------------------------
// Подключение Font Awesome 7
function bahus_enqueue_font_awesome() {
    wp_enqueue_style(
        'bahus-font-awesome',
        'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css',
        array(),
        '7.0.0',
        'all'
    );
}
add_action('wp_enqueue_scripts', 'bahus_enqueue_font_awesome');
add_action('admin_enqueue_scripts', 'bahus_enqueue_font_awesome');

// -----------------------------------------------------------------------------
// Стили для админ-панели и панели под заголовками
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 7 Free" !important;
        }
        #wpadminbar #wp-admin-bar-bahus-move-to-trash .ab-item {
            display: flex !important;
            align-items: center !important;
        }
        .bahus-post-title-container {
            display: block;
            position: relative;
        }
        .bahus-trash-panel {
            display: block;
            margin-top: 6px;
            opacity: 0;
            transition: opacity 0.3s ease;
            pointer-events: none;
        }
        .bahus-trash-panel.visible {
            opacity: 1;
            pointer-events: auto;
        }
        .bahus-trash-panel a {
            color: #ffffff;
            text-decoration: none;
            font-size: 18px;
            display: inline-block;
        }
        .bahus-trash-panel i {
            font-family: "Font Awesome 7 Free";
            color: #ffffff;
        }
    </style>';
}
add_action('wp_head', 'bahus_custom_admin_bar_styles');
add_action('admin_head', 'bahus_custom_admin_bar_styles');

// -----------------------------------------------------------------------------
// Добавляем панель только к заголовкам постов в цикле на главной
function bahus_add_front_trash_panel($title, $id = null) {
    if (BPF_DISABLE_FRONT_PANEL) {
        return $title;
    }

    if (!(is_home() || is_front_page()) || !in_the_loop() || !is_main_query()) {
        return $title;
    }

    global $post;
    if (!$post || $post->post_type !== 'post' || !current_user_can('delete_post', $post->ID)) {
        return $title;
    }

    if (!$id) {
        $id = get_the_ID();
    }

    $delete_url = get_delete_post_link($id, '', true);

    // Оборачиваем заголовок и добавляем панель под ним
    $title_html  = '<span class="bahus-post-title-container">';
    $title_html .= $title;
    $title_html .= '<span class="bahus-trash-panel">';
    $title_html .= '<a href="' . esc_url($delete_url) . '" onclick="return confirm(\'Вы уверены, что хотите переместить этот пост в корзину?\');">';
    $title_html .= '<i class="fas fa-trash-alt"></i>';
    $title_html .= '</a>';
    $title_html .= '</span>';
    $title_html .= '</span>';

    return $title_html;
}
add_filter('the_title', 'bahus_add_front_trash_panel', 10, 2);

// -----------------------------------------------------------------------------
// JS: показывать панель при наведении на заголовок
function bahus_front_trash_panel_script() {
    if (BPF_DISABLE_FRONT_PANEL || (!is_home() && !is_front_page())) {
        return;
    }
    ?>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelectorAll('.bahus-post-title-container').forEach(function(container) {
                var panel = container.querySelector('.bahus-trash-panel');
                if (!panel) return;

                container.addEventListener('mouseenter', function() {
                    panel.classList.add('visible');
                });
                container.addEventListener('mouseleave', function() {
                    panel.classList.remove('visible');
                });
            });
        });
    </script>
    <?php
}
add_action('wp_footer', 'bahus_front_trash_panel_script');

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

 

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

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

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

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

Оцените статью
( 1 оценка, среднее 5 из 5 )
Добавить комментарий

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

Защищено CleanTalk Anti-Spam