как перенаправить страницу после удаления поста внутри страницы поста?

Вопрос или проблема

в файле single.php я хочу добавить кнопку удаления, чтобы пользователи могли удалять пост напрямую. После удаления поста страница будет перенаправлена на профиль.

вот html для кнопки удаления

<a class="edit-post" onclick="redirectFunction();" href="https://wordpress.stackexchange.com/questions/251494/<?php bp_loggedinuser_link(); ?>articles/"> Удалить </a>

а вот скрипт для удаления поста

function redirectFunction(){
    <?php wp_delete_post(get_the_id()); ?>
}

проблема в том, что когда я нажимаю на другую ссылку, которая отображается на странице, эта функция также срабатывает и удаляет пост.

пожалуйста, помогите или дайте знать, если есть какой-то лучший способ. спасибо

Есть хук действия в wp_delete_post(), называемый after_delete_post. Так что подключите функцию к этому хуку и перенаправьте пользователя туда, куда вам нужно. Вы можете перенаправить на страницу автора с помощью следующего кода-

add_action( 'trash_post', 'the_dramatist_redirect_after_post_delete' );
function the_dramatist_redirect_after_post_delete() {
    if ( !is_admin() ) {
        wp_safe_redirect( get_author_posts_url( get_current_user_id() ) );
        exit();
    }
}

Надеюсь, это поможет.

Другой способ обработки ajax-запросов для удаления поста — использовать jQuery и встроенные ajax-функции, предоставленные WP.

Html

<a class="delete-post" data-postid="<?php echo get_the_id(); ?>" href="#">Удалить</a>




<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>

<script>
    jQuery(document).ready(function($) {
    $('.delete-post').on('click', function(e) {
        e.preventDefault();

        var postId = $(this).data('postid');

        // Отправить AJAX-запрос для удаления поста
        $.ajax({
            type: 'POST',
            url: ajax_object.ajaxurl,
            data: {
                action: 'delete_post',
                post_id: postId,
            },
            success: function(response) {
                // Перенаправить на страницу профиля после успешного удаления
                window.location.href="https://wordpress.stackexchange.com/questions/251494/<?php echo bp_loggedinuser_link(); ?>articles/";
            },
            error: function(error) {
                console.log(error.responseText);
            }
        });
    });
    });
</script>

functions.php

Подключите скрипт.

function enqueue_custom_scripts() {
    // Подключение jQuery
    wp_enqueue_script('jquery');

    // Подключение вашего кастомного скрипта
    wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), null, true);

    // Передача скрипту необходимых данных
    wp_localize_script('custom-script', 'ajax_object', array('ajaxurl' => admin_url('admin-ajax.php')));
}

add_action('wp_enqueue_scripts', 'enqueue_custom_scripts'); 



function delete_post_callback() {
    if (isset($_POST['action']) && $_POST['action'] == 'delete_post') {
        $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;

        // Проверить, есть ли у пользователя право удалять пост
        if (current_user_can('delete_post', $post_id)) {
            wp_delete_post($post_id);
            echo 'Пост успешно удален';
        } else {
            echo 'Доступ запрещен';
        }
    }

    die();
}

add_action('wp_ajax_delete_post', 'delete_post_callback');
add_action('wp_ajax_nopriv_delete_post', 'delete_post_callback'); // Позволить незалогиненным пользователям удалять посты

.

Ответ или решение

Чтобы осуществить удаление поста на странице и перенаправление пользователя на страницу профиля после удаления, рекомендуется использовать AJAX запросы, что обеспечит более плавный и интерактивный опыт взаимодействия. Давайте подробно рассмотрим необходимые шаги.

Шаг 1: HTML-код кнопки удаления поста

Для создания кнопки удаления поста используйте следующий HTML-код. Это обеспечит получение ID поста через атрибут data:

<a class="delete-post" data-postid="<?php echo get_the_ID(); ?>" href="#">Удалить</a>

Шаг 2: JavaScript для обработки клика и AJAX-запроса

Добавьте следующий JavaScript-код в ваш файл скриптов. Этот код будет слушать событие клика по кнопке и отправлять AJAX-запрос на сервер для удаления поста:

<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>

<script>
jQuery(document).ready(function($) {
    $('.delete-post').on('click', function(e) {
        e.preventDefault();

        var postId = $(this).data('postid');

        // Отправка AJAX-запроса для удаления поста
        $.ajax({
            type: 'POST',
            url: ajax_object.ajaxurl,
            data: {
                action: 'delete_post',
                post_id: postId,
            },
            success: function(response) {
                // Перенаправление на страницу профиля после успешного удаления
                window.location.href = "<?php echo bp_loggedinuser_link(); ?>articles/";
            },
            error: function(error) {
                console.log('Ошибка: ' + error.responseText);
            }
        });
    });
});
</script>

Шаг 3: Функции в файле functions.php

Далее необходимо разобрать код в функции functions.php, который будет обрабатывать AJAX-запрос и удалять пост:

  1. Очередь скриптов: Обеспечьте загрузку jQuery и вашего собственного скрипта, а также предоставьте параметры AJAX:
function enqueue_custom_scripts() {
    wp_enqueue_script('jquery');

    // Регистрация скрипта удаления
    wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', array('jquery'), null, true);

    // Локализация скрипта
    wp_localize_script('custom-script', 'ajax_object', array('ajaxurl' => admin_url('admin-ajax.php')));
}

add_action('wp_enqueue_scripts', 'enqueue_custom_scripts');
  1. Обработка AJAX-запроса удаления поста:
function delete_post_callback() {
    if (isset($_POST['action']) && $_POST['action'] == 'delete_post') {
        $post_id = isset($_POST['post_id']) ? intval($_POST['post_id']) : 0;

        // Проверка прав на удаление поста
        if (current_user_can('delete_post', $post_id)) {
            wp_delete_post($post_id);
            echo 'Пост успешно удален';
        } else {
            echo 'Нет разрешения на удаление';
        }
    }

    wp_die(); // Завершение работы AJAX-запроса
}

add_action('wp_ajax_delete_post', 'delete_post_callback');
add_action('wp_ajax_nopriv_delete_post', 'delete_post_callback'); // Запрос для неавторизованных пользователей

Заключение

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

SEO-оптимизация

Для повышения видимости страниц на поисковых системах рекомендуется уделить внимание соответствующим метатегам, заголовкам и структурированию контента. Использование ключевых слов, связанных с удалением постов и функциональностью WordPress, поможет улучшить результаты поиска.

Следуя этим рекомендациям, вы сможете обеспечить качество, профессионализм и взаимодействие пользователей с вашим сайтом на высшем уровне.

Оцените материал
Добавить комментарий

Капча загружается...