検索キーワードを入力
カテゴリーを選択

運用を快適に!WordPressのゴミ箱の機能をカスタマイズする実装方法を解説(サンプルコード付き)

投稿日:2025年03月03日(月) 更新日:2025年03月04日(火)
運用を快適に!WordPressのゴミ箱の機能をカスタマイズする実装方法を解説(サンプルコード付き)|UMENOKI|すぐに仕事で使えるIT技術情報メディア

みなさんこんにちは!エンジニアの高澤です!

今回はWordPressのゴミ箱の機能をカスタマイズする実装方法について解説していきたいと思います。

WordPressのゴミ箱とは、CMSやASPなどWebサイトを管理するツールには必ず備わっているページを削除する機能のことを言います。

WordPressのゴミ箱機能は、特に普通に使う分には不便に感じることは無いかと思いますが、今回解説する実装方法がわかっていれば、そもそもゴミ箱機能周りをカスタマイズできることが理解できるとともに、「もっとこうしたい!」といった要望や利便性の向上に役立てるかと思います。

ニッチな内容になるかと思いますが、よろしければぜひ当記事をWordPressカスタマイズにお役立てください。

WordPressのゴミ箱とは

WordPressのゴミ箱とは、投稿やページ、コメントなどを誤って削除してしまった場合に備えて、一時的に保存しておくシステムのことを言います。

ゴミ箱に移動したアイテムはすぐには完全に削除されず、一定期間(デフォルトでは30日間)保存されます。この30日の間であれば、簡単に復元することができます。

それでは、ゴミ箱の基本的な使い方を事前におさらいしておきましょう。

WordPress管理画面「投稿」をクリックしていただき、「投稿一覧」を表示します。

各記事の項目一覧のいずれかをホバーすると、下図のように「編集」や「クリック編集」などともに「ゴミ箱へ移動」というテキストリンクが表示されます。

ゴミ箱に入れたい記事があれば、このテキストリンクをクリックします。

「ゴミ箱へ移動」をクリック後、下図のように画面上に「ゴミ箱へ移動しました」のバーが表示されます。

誤って「ゴミ箱へ移動」ボタンをクリックしてしまっても、バーにある「元に戻す」をクリックすれば記事一覧へ戻すことができます。

また、画面上にある「公開済み」や「下書き」の記事数カウントの隣に「ゴミ箱」に入れた記事数がカウントされた数が表示されます。

上図の「ゴミ箱」のテキストリンクをクリックすると、下図のようにゴミ箱に入れた記事の一覧が表示されます。

この一覧に表示されている記事は、デフォルトで30日間保存され、過ぎると完全に削除されます。

できることとしては、「復元」と「完全に削除する」の2つになります。

文字通り、「復元」をクリックするとゴミ箱に入れる前の状態に戻すことができ、「完全に削除する」をクリックすると、完全にページを削除し、二度と復元できなくなりますのでご注意ください。

ここまでで、ゴミ箱機能に関する使い方や流れの解説は以上になります。

ゴミ箱は、他にも下図のように記事編集画面のブロックエディタの設定パネルにもあります。

また、「コメント」機能にもゴミ箱機能は搭載されているので、やろうと思えばコメントのゴミ箱機能もカスタマイズすることが可能です。(マニアック中のマニアックですが…笑)

今回はこのゴミ箱機能に関するカスタマイズ方法をご紹介するので、ぜひお仕事などにご活用ください。

WordPressのゴミ箱の機能を変更する実装方法

それでは早速、WordPressのゴミ箱の機能を変更する実装方法について解説いたします。

今回解説するカスタマイズ方法は、いずれも実用的なものとして厳選した内容となっております。

コピー&ペーストするだけで簡単にカスタマイズできる構成にしておりますので、よろしければぜひWordPressでのサイト制作やサイト運用のなかで利便性を向上させたいなどの場面でご活用ください。

ゴミ箱に移動する前に警告を表示

ゴミ箱に移動する前に警告を表示させるようにする方法を解説します。

ゴミ箱に移動する前に事前に警告を表示するようにすれば、誤ってページを削除するしてしまうことを防止し、作業上の事故を防止することができます。

こちらの実装は、まだWordPressを触って間も無い新人のウェブ担当者さんやライターさんにとっては、結構助かる機能になるかと思います。

というのも、過去にライターさんが誤ってゴミ箱リンクを押してしまい、ディレクターさんに「すみません、記事をゴミ箱に入れちゃいました…」というエピソードがありました。

ゴミ箱リンクをクリックしてしまったときに、事前に警告のポップアップが表示されれば、やってしまった時のテンパリを防止することができ、みんなが幸せになることと思います。(一見小さいことですがこれがまた大きい…)

ここでは以下のパターンでそれぞれ実装方法を解説します。

  • 投稿一覧の「ゴミ箱へ移動」クリック時
  • ゴミ箱ページの「完全に削除する」クリック時

それぞれ解説いたします。

投稿一覧の「ゴミ箱へ移動」クリック時

投稿一覧の「ゴミ箱へ移動」クリック時の実装後のイメージを解説します。

まず、下図のように「ゴミ箱へ移動」リンクをクリックしたときに…

以下のように警告のポップアップが表示されます。「OK」を押したらゴミ箱に入り、「キャンセル」を押せばそのまま何も起こらずキャンセルされます。

こちらを実装する場合、functions.phpに以下のコードをコピー&ペーストしてください。

<?php
function confirm_before_trash() {
    $screen = get_current_screen();
    
    // 投稿一覧画面(edit.php)のときのみ実行
    if ($screen && $screen->base === 'edit' && !isset($_GET['post_status']) && $_GET['post_status'] !== 'trash') {
        echo '<script>
            document.addEventListener("DOMContentLoaded", function() {
                let trashLinks = document.querySelectorAll(".submitdelete");
                trashLinks.forEach(link => {
                    link.addEventListener("click", function(event) {
                        if (!confirm("本当にゴミ箱に移動しますか?")) {
                            event.preventDefault();
                        }
                    });
                });
            });
        </script>';
    }
}
add_action('admin_footer', 'confirm_before_trash');

ペーストが完了したら、管理画面を更新していただき、再度「ゴミ箱へ移動」リンクをクリックしたら警告のポップアップが表示されるかと思います。

ゴミ箱ページの「完全に削除する」クリック時

次は、ゴミ箱ページの「完全に削除する」クリック時の実装後のイメージを解説します。

まず、下図のように「完全に削除する」リンクをクリックしたときに…

以下のように警告のポップアップが表示されます。「OK」を押したらゴミ箱に入り、「キャンセル」を押せばそのまま何も起こらずキャンセルされます。

こちらを実装する場合、functions.phpに以下のコードをコピー&ペーストしてください。

<?php
function confirm_before_forever_trash() {
    $screen = get_current_screen();
    
    // ゴミ箱ページ(edit.php?post_status=trash&post_type=post)のときのみ実行
    if ($screen && $screen->base === 'edit' && isset($_GET['post_status']) && $_GET['post_status'] === 'trash') {
        echo '<script>
            document.addEventListener("DOMContentLoaded", function() {
                let trashLinks = document.querySelectorAll(".delete");
                trashLinks.forEach(link => {
                    link.addEventListener("click", function(event) {
                        if (!confirm("完全に削除しますか?二度と復元することはできません。")) {
                            event.preventDefault();
                        }
                    });
                });
            });
        </script>';
    }
}
add_action('admin_footer', 'confirm_before_forever_trash');

ペーストが完了したら、管理画面を更新していただき、再度「完全に削除する」リンクをクリックしたら警告のポップアップが表示されるかと思います。

自動で消去される日数を変更する

自動で消去される日数を変更する実装方法について解説いたします。

通常WordPressでは自動削除が30日後に設定されていますが、ここでの実装方法でカスタマイズすれば「7日後」や「3日後」などへ変更することが可能です。

コードの基本としては、以下のようになります。

define('EMPTY_TRASH_DAYS', 日数);

7日後に自動削除させたい場合は、WordPress本体ファイルの一つのwp-config.phpに以下のコードをコピー&ペーストしてください。

define('EMPTY_TRASH_DAYS', 7);

上記コードのように第2引数に「7」と設定すると、ゴミ箱に移動した投稿は7日後に完全に削除されます。

WordPressのデフォルトでは30日に設定されていますが、この値を「0」にするとゴミ箱機能が無効になり、削除した投稿が即座に完全削除されるようになります。

逆に自動削除のタイミングを引き延ばすこともできるので、ご自身の任意の日数を設定することで、誤って削除した投稿を復元できる期間を調整できます。

ゴミ箱へ移動させずに即完全に削除

今度は、ゴミ箱へ移動させずに即削除させたい場合の実装方法について解説いたします。

即完全に削除の場合、復元できなくなるので注意が必要です。

即完全に削除させたい場合は、WordPress本体ファイルの一つのwp-config.phpに以下のコードをコピー&ペーストしてください。

define('EMPTY_TRASH_DAYS', 0);

「define(‘EMPTY_TRASH_DAYS’, 0);」を設定すると、WordPress のゴミ箱機能が無効になり、即完全に削除になります。

通常、投稿や固定ページなどを削除すると一時的にゴミ箱に移動し、デフォルトでは 30 日後に完全削除されます。しかし、この値を0」にすると、削除ボタンを押した時点で即座に完全削除され、復元ができなくなります。

この設定は、ストレージを節約したい場合や、誤ってゴミ箱に移動させるのを防ぎたい場合に有効ですが、誤削除のリスクが高まるため慎重に使用する必要があります。

特定の投稿タイプのみゴミ箱へ移動させずに即完全に削除

特定の投稿タイプのみゴミ箱へ移動させずに即完全に削除させる方法について解説いたします。

実装する場合は、functions.phpに以下のコードをコピー&ペーストしてください。

<?php
function disable_trash_for_custom_post($post_id) {
    $post = get_post($post_id);

    // 投稿が存在しない場合は処理を中断
    if (!$post) {
        return;
    }

    // 通常の投稿タイプ(post)のみ即時削除
    if ($post->post_type === 'post') {
        remove_action('wp_trash_post', 'disable_trash_for_custom_post'); // 無限ループ防止
        wp_delete_post($post_id, true); // ゴミ箱を使わず完全削除
        add_action('wp_trash_post', 'disable_trash_for_custom_post'); // フックを再登録

        // 投稿一覧ページへリダイレクト
        wp_redirect(admin_url('edit.php'));
        exit;
    }
}
add_action('wp_trash_post', 'disable_trash_for_custom_post');

上記コードは、WordPressの投稿タイプである「投稿」の「post」をゴミ箱へ移動する代わりに即時削除する機能を追加します。(ここでは仮で「投稿」の「post」としていますが、この部分をご自身のカスタム投稿タイプ名に変更してください)

wp_trash_postフックを使用し、投稿がゴミ箱へ移動されるタイミングで「wp_delete_post($post_id, true);」を実行し、完全に削除します。

無限ループを防ぐため、フックを一時的に削除し、処理後に再登録します。

また、削除後に「wp_redirect(admin_url(‘edit.php’));」を実行して投稿一覧ページへリダイレクトし、エラーメッセージを防ぎます。

これにより、投稿が即時削除され、ユーザーはスムーズに一覧ページへ戻ることができます。

ゴミ箱の自動削除機能を無効化

ゴミ箱の自動削除機能を無効化する方法について解説いたします。

実装する場合は、functions.phpに以下のコードをコピー&ペーストしてください。

<?php
function disable_scheduled_delete() {
  remove_action('wp_scheduled_delete', 'wp_scheduled_delete');
}
add_action('init', 'disable_scheduled_delete');

上記コードは、WordPress の自動ゴミ箱削除機能を無効化するためのものです。

通常、WordPress はwp_scheduled_deleteというスケジュールイベントを実行し、EMPTY_TRASH_DAYS に設定された日数後にゴミ箱内の投稿を自動削除します。

しかし、このコードではremove_action(‘wp_scheduled_delete’, ‘wp_scheduled_delete’)関数を使用し、このスケジュールイベントを削除することで、ゴミ箱内の投稿が自動的に削除されるのを防ぎます。

これにより、ゴミ箱内の投稿を手動で削除するまで永遠に保持できるようになります。

コメント機能のゴミ箱で事前に警告を表示させた上で即完全に削除させる機能の実装

ちょっとマニアックですが、コメント機能のゴミ箱で事前に警告を表示させた上で即完全に削除させる機能の実装する方法について解説いたします。

下図のように、WordPress管理画面「コメント」のコメント一覧の各データ項目の「ゴミ箱へ移動」リンクをクリックすると事前に警告を表示させて、「OK」をクリックするとゴミ箱へ行かずに即完全に削除することができます。

応用を効かせやすくするために、あえてわざと少し複雑な機能として解説しております。

実装する場合は、functions.phpに以下のコードをコピー&ペーストしてください。

WordPressのコメント機能ではAjaxでの非同期処理が行われているため、Ajaxでの実装コードとなっております。

<?php
function custom_admin_comment_script() {
    $ajax_url = admin_url('admin-ajax.php');
    ?>
    <script>
    jQuery(document).ready(function($) {
        $('.trash a').on('click', function(e) {
            e.preventDefault();

            if (!confirm('このコメントを完全に削除しますか?')) {
                return false; // キャンセル時に処理を完全に停止
            }

            var commentId = $(this).closest('tr').attr('id').replace('comment-', '');

            $.ajax({
                type: 'POST',
                url: '<?php echo esc_url($ajax_url); ?>',
                data: {
                    action: 'delete_comment_permanently',
                    comment_id: commentId
                },
                success: function(response) {
                    if (response.success) {
                        alert(response.data.message);
                        location.reload(); // ページをリロードして反映
                    } else {
                        alert(response.data.message);
                    }
                },
                error: function() {
                    alert('エラーが発生しました');
                }
            });

            return false; // ゴミ箱へ移動のデフォルト動作を防ぐ
        });
    });
    </script>
    <?php
}
add_action('admin_head', 'custom_admin_comment_script');

// コメントを完全削除するAjax処理
function delete_comment_permanently_ajax() {
    // 権限チェック
    if (!current_user_can('moderate_comments')) {
        wp_send_json_error(['message' => '権限がありません']);
    }

    // コメントIDの取得
    if (!isset($_POST['comment_id']) || !is_numeric($_POST['comment_id'])) {
        wp_send_json_error(['message' => 'コメントIDが無効です']);
    }

    $comment_id = intval($_POST['comment_id']);

    // コメントが存在するか確認
    if (!get_comment($comment_id)) {
        wp_send_json_error(['message' => 'コメントが見つかりません']);
    }

    // コメントを完全削除
    wp_delete_comment($comment_id, true);

    // 正常終了のレスポンスを送信
    wp_send_json_success(['message' => 'コメントを完全削除しました']);
}

// Ajaxフック登録(管理画面用)
add_action('wp_ajax_delete_comment_permanently', 'delete_comment_permanently_ajax');

上記コードは、WordPressの管理画面でコメントを「ゴミ箱へ移動」する際に、Ajaxを使用してコメントを完全に削除するカスタマイズを行っています。

まず、独自の定義したcustom_admin_comment_script()関数をadmin_headフックで実行し、管理画面の <head>内にJavaScriptを埋め込みます。

このスクリプトでは、jQueryを使い、ゴミ箱ボタン(.trash a)をクリックした際に確認ダイアログを表示し、ユーザーがOKを押すとAjaxリクエストを送信します。admin-ajax.phpに対して delete_comment_permanentlyというアクションを実行し、サーバー側でwp_delete_comment()関数を用いてコメントを完全削除します。

処理が成功すると、削除完了のメッセージを表示し、ページをリロードして変更を反映します。また、キャンセル時には「return false;」を使い、WordPressのデフォルトのゴミ箱処理を防ぎます。

さらに、delete_comment_permanently_ajax()関数をwp_ajax_delete_comment_permanentlyに登録し、管理者のみが削除できるようにしています。コメントの存在確認や権限チェックも行い、安全に処理を実行する設計になっています。

まとめ

WordPressのゴミ箱の機能をカスタマイズする実装方法について解説は以上になります。

WordPressのゴミ箱機能は、通常の使用では特に不便を感じることは少ないですが、カスタマイズすることでさらに便利に活用できます。

今回紹介した実装方法を理解すれば、ゴミ箱機能の仕組みを把握できるだけでなく、「もっとこうしたい!」といった具体的なカスタマイズにも対応しやすくなります。

少しニッチな内容ではありますが、WordPressの利便性向上に役立てていただければ幸いです。ぜひ、今回の解説を参考にカスタマイズに挑戦してみてください。

執筆者

UMENOKI編集部 高澤 翔汰

歴5年目(2024年8月以降から5年目です)のエンジニアです!
CMSでのサイト構築とWebデザイン制作を兼任して5年目になります。
自作のiOSアプリ(iPhoneアプリ)やWordPressプラグインを開発することもあり、まだまだ現在進行形で勉強中です!

お気軽に皆さんのご要望をお聞かせください!

どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!

例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など

送信と同時にプライバシーポリシーに同意したものとします。