WordPressで特定ページ(記事)の削除を禁止する方法

WordPress

WordPressで特定の固定ページを削除できないようにするコードのご紹介です。

テーマ側で、直接記事IDを指定して、処理している場合、
管理者であっても削除できなくしたい時ってありますよね。

クライアント側で編集する人が複数いたり、
自分自身でも間違ってゴミ箱に移動してしまうことも無くはないので、
指定したページ(記事)を指定しておくことで、
ゴミ箱へ移動できなくする処理を作ってみました。

固定ページのIDをfunctions内に直接記述する為、
クライアント担当側での書換えや後々のメンテナンスなどがやりづらいかもしれません。

管理画面から指定できるようプラグイン化もしたいと思いますが、
いつになるかは未定です。

//ゴミ箱に移動する直前に実行する
add_action( "wp_trash_post", "no_delete_page",1,1 );
function no_delete_page($post_id) {
    global $post_type;
    
    //固定ページのみ対象
    if($post_type == 'page'){
        //削除したくないページIDを配列に格納
        $no_delete_page_lists = array("2","5","7");
        
        if(in_array($post_id, $no_delete_page_lists)){
            if(!strpos(wp_get_referer(), 'notrash=1')){
                $no_trash_flag = '&notrash=1';
            }
            wp_redirect( wp_get_referer() . $no_trash_flag );
            exit();
        }
    }
}

//エラーメッセージ表示処理
add_action('admin_notices', 'trash_notice');
function trash_notice(){
    //パラメータがある時にメッセージを表示
    if(strpos(getenv('REQUEST_URI'), 'notrash=1')){
        echo '<div class="message error"><p>選択されたページを削除することはできません。</p></div>';
    }
}

※複数まとめて一括削除する際、削除禁止ページと指定なしページが混同していた場合、
指定なしページはゴミ箱に移動し、削除禁止ページは残りますが、
エラーメッセージは、上記で指定しているもののみになります。

「1件のページをゴミ箱に移動しました。」
というゴミ箱へ移動したメッセージは表示されません。

もう一点、問題があり、
削除禁止ページをゴミ箱へ移動しようとして、
エラーメッセージが出た後、固定ページのページ切替を行っても
パラメータが引き継がれる為、エラーメッセージが出たままになってしまいます。
これはちょっと致命的かも、、、

時間があれば、調整しようと思いますが、
手っ取り早い解決方法などをご存じの方がいれば、ご教示ください。

コメント

スポンサーリンク
タイトルとURLをコピーしました