WordPressの記事ページに記事を削除できるボタンを追加する方法

wordpressで記事を削除するときは通常であれば管理画面で行うかと思います。しかし、特殊なブログを運営していると、記事ページから直接記事を削除したい場合があります。wordpressの管理画面はクッションが多いため管理画面にいって、記事を選んで、それをゴミ箱に移して…。とけっこうめんどくさいです。そこで記事ページから今見ているページを直接削除したいわけです。

スポンサーリンク

wordpressで記事ページに記事を削除できるボタンを追加する方法

get_delete_post_link()関数を使う

get_delete_post_link()関数は引数に記事のidを渡すことで記事をゴミ箱に移動するためのリンクを生成します: get_delete_post_link() | Function | WordPress Developer Resources

実際のコードは以下のようになります。

<?php
// 管理者のみに表示する
if (current_user_can('manage_options')) {
  $trash_link = get_delete_post_link($post->ID);
  echo '<a href="' . esc_url($trash_link) . '" class="trash_button" onclick="return confirm(\'この記事をゴミ箱に移動しますか?\')">ゴミ箱へ移動</a>';
}
?>

このコードをsingle.phpに貼り付けると記事をゴミ箱に移動するリンクが表示されます。管理者のみに表示したいためcurrent_user_can(‘manage_options’)で管理者のみ表示するようにしています。

これでリンクをクリックすると記事はゴミ箱に移動されますが、404エラーのページにリダイレクトされてしまいます。それでよいならこの方法でもよいのですが筆者は404にリダイレクトしてほしくないので別の方法を探しまた。

formで記事のidを送信してfunction.phpでゴミ箱に移動する処理をやる方法

さきほど紹介した方法の他にはフォームを設置して、そこから記事のidをpostしてやり、それをfunction.phpで処理するというやり方があります。

まずsingle.phpにフォームを追加するコードを設置します。

<?php
// 管理者のみに表示する
if (current_user_can('manage_options')) {
  echo '<form method="post">';
echo '<input type="hidden" name="post_id" value="' . get_the_ID() . '">';
echo '<button type="submit" name="delete_post">削除する</button>';
echo '</form>';
}
?>

フォームの値にget_the_ID()で取得した記事のidを送信するようにします。

次にfunction.phpに以下のコードを書きます↓

function mytrashpost(){
    if (isset($_POST['delete_post'])) {
        $post_id = $_POST['post_id'];
        wp_trash_post($post_id);
        //リダイレクト先を指定
        exit;
    }
}
add_action('init', 'mytrashpost');

フォームを送信したらwp_trash_postで記事をゴミ箱に送るように記述しています。ちなみにアクションフックのinitですがWordPressの読み込みが完了した後、headerが送信される前に発火します。なのでsubmitしたらゴミ箱へ送る処理が実行できるわけすね。

wp_trash_post()は記事をゴミ箱へ送る関数ですが、wp_delete_post()という記事を完全に削除する関数もあります。

ちなみにリダイレクト先を指定すれば指定のページにリダイレクトさせることもできます。

コメント

タイトルとURLをコピーしました