Как удалять посты, не заходя в админку

Я уже писал о функции, которая помогает администратору редактировать , помечать как спам и удалять комментарии, не заходя в административную часть сайта. Однако меня тут же обескуражили вопросом, а можно ли сделать то же самое с постами – удалять их, не заходя в админку? Порывшись в интернете и изучив материалы по этой теме, я понял, что и это возможно.

Ссылка для редактирования поста или страницы появляется у вас и так автоматически. Давайте сделаем рядом с ней еще одну ссылку, кликнув по которой, вы отправите пост в корзину.

Откройте файл functions.php и вставьте в него такой код:

function wp_delete_post_link($link = 'Delete This', $before = '', $after = '')
{
	global $post;
	if ( $post->post_type == 'page' ) {
		if ( !current_user_can( 'edit_page', $post->ID ) )
			return;
	} else {
		if ( !current_user_can( 'edit_post', $post->ID ) )
			return;
	}
	$link = "ID, 'delete-post_' . $post->ID) . "'>".$link."";
	echo $before . $link . $after;
}

Этот код создает функцию, которая выводит ссылку на удаление. Ссылка эта доступна только тем, кто наделен соответствующими правами – то есть по умолчанию только администратору блога. Теперь осталось вывести эту ссылку в нужном месте. Для этого нужно вставить в single.php или а page.php, в цикл, где выводится содержимое, такой код:

<?php wp_delete_post_link('Удалить', '

', '

'); ?>

Обратите внимание, что в качестве аргументов функции выступают название ссылки и разметка HTML до и после этой ссылки. Пользуйтесь!

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

16 Комментарии

  1. Начиная с версии 2.9, можно также воспользоваться встроенной функцией

    get_delete_post_link()

    . В этом случае достаточно добавить подобный фрагмент внутри основного цикла:

    < ?php if ( current_user_can('delete_post', get_the_id() ) ) : ?>
    Удалить запись
    < ?php endif; ?>
    
  2. вы хоть сами пользуетесь этими функциями? в курсе что после удаления таким способом идет переход на несуществующую страницу

    • Я удалял с главной, поэтому ошибка проявилась не сразу. Чтобы после удаления происходил переход на главную страницу, можно добавить фрагмент в functions.php активной темы:

      function redirect_after_deleting_a_post($location) {
      	if ( isset($_GET['action']) && $_GET['action'] == 'trash' ) {
      		if ( strpos($location, 'wp-admin') === false )
      			$location = get_option('siteurl');
      	}
      	return $location;
      }
      add_filter('wp_redirect', 'redirect_after_deleting_a_post');
      
    • Да, в курсе. Мне кажется, что так оно и лучше – движок как бы дает знать, что такой страницы уже действительно не существует – на то она и 404 страница.
      Если удалять с главной страницы или из архива, то переход идет на существующую страницу.
      Ваш метод

      < ?php if ( isset($_GET['trashed']) && (int) $_GET['trashed'] ) {
       wp_redirect(get_option('siteurl') . '/');
       }?>
      

      и тот, кторый предложил Сергей Бирюков для вставки в functions.php

      function redirect_after_deleting_a_post($location) {
      	if ( isset($_GET['action']) && $_GET['action'] == 'trash' ) {
      		if ( strpos($location, 'wp-admin') === false )
      			$location = get_option('siteurl');
      	}
      	return $location;
      }
      add_filter('wp_redirect', 'redirect_after_deleting_a_post');
      

      – оба дают одинаковый результат и работают правильно. Спасибо!

  3. Замечательный сайт, нашел здесь ответ на вопрос который нигде не мог найти. Огромное спасибо!
    Маленький вопрос по теме, после удаления поста редирект ведет на главную сайта, а можно ли сделать чтоб перенаправляло на страницу на которой был..?
    И после вставки кода

    function redirect_after_deleting_a_post($location) {
     if ( isset($_GET['action']) && $_GET['action'] == 'trash' ) {
     if ( strpos($location, 'wp-admin') === false )
     $location = get_option('siteurl');
     }
     return $location;
     }
     add_filter('wp_redirect', 'redirect_after_deleting_a_post');

    в functions.php появилась ошибочка, после замены

    &&

    на

    &&

    все пришло в норму.

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

      Так а как переправить на страницу, которую вы только что удалили?

  4. если удалена страница на которой был – понятно… а если нахожусь на 12 странице на которой анонсы статей… удаляю статью и перекидывает на 1 страницу, а нужно чтоб снова на 12…

  5. пример с моим сайтом…
    я хочу удалить статью анонс которой находится на второй странице http://news-info.net/?paged=2
    после удаления меня перенаправит на http://news-info.net/, можно ли сделать чтоб в данном случае перенаправило снова на http://news-info.net/?paged=2…?
    Обратите внимание, что речь идет не о странице полной статьи…

  6. не получается, да и ладно и так нормальный вариант, спасибо за оказаную помощь =)

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

  8. всмысле создаю страницу через админку и пишу текст страницы, в котором надо написать код <script type="text……… и никак не могу это воплотить так как скрипт выполняется…

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*