Вопрос или проблема
в файле 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-запрос и удалять пост:
- Очередь скриптов: Обеспечьте загрузку 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');
- Обработка 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, поможет улучшить результаты поиска.
Следуя этим рекомендациям, вы сможете обеспечить качество, профессионализм и взаимодействие пользователей с вашим сайтом на высшем уровне.