投稿が削除されないようにするにはどうすればよいですか?


8

問題を監査するために、すべてのユーザーに対して、投稿をゴミ箱に入れ、削除することはできません。

だから私はのようなプラグインを持っています

add_action('before_delete_post', function($id) {
        wp_die(0);
    });

しかし、すべての削除アクションがajaxであるとは限らないため、結果として「0」のエラーページを返す黒い画面が表示されます。

上記のコードは機能的には問題ありませんが、もっと良い方法はありますか?

回答:


9

アクションを死なせずに、リダイレクトするだけです(好きな場所に):

function wpse_92155_before_delete_post() {
    wp_redirect(admin_url('edit.php'));
    exit();
} // function wpse_92155_before_delete_post
add_action('before_delete_post', 'wpse_92155_before_delete_post', 1);

昔の話ですが、AJAX呼び出しとXML-RPCリクエストでこれがどのように機能するのでしょうか。これらの場合、リダイレクトが正しい解決策であるとは思いません。
Andrea Sciamanna 2014

5

before_delete_post削除に対する保護の最後の層としてフックを使用します(@tfのソリューションを使用しており、これが正しい答えです)。

そして、最初に「削除」オプションをサイトから削除します。次の例では、一括アクションゴミ箱を空にするボタンを非表示にし、行を完全に削除するアクションを削除します。

前

このコードで:

add_action( 'admin_head-edit.php', 'hide_delete_css_wpse_92155' );
add_filter( 'post_row_actions', 'hide_row_action_wpse_92155', 10, 2 );
add_filter( 'page_row_actions', 'hide_row_action_wpse_92155', 10, 2 );

function hide_delete_css_wpse_92155()
{
    if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) 
    {
        echo "<style>
            .alignleft.actions:first-child, #delete_all {
                display: none;
            }
            </style>";
    }
}

function hide_row_action_wpse_92155( $actions, $post ) 
{
    if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) 
        unset( $actions['delete'] );

    return $actions; 
}

これが結果です:

後

興味のあるメモ

フックはありませんcpt_row_actions。フックpage_row_actionspost_row_actions、投稿タイプが階層的であるかどうかに応じてそれぞれ適用されます。


よし。あなたと@tfの両方に+1。私はこれまでに彼のワンライナーに賛成することはできませんでした。保留中のさらなる情報は、その主題に関するさらなる研究によってのみその質を評価できたからです。さらに別の答えが完全に文脈に入れられます。
ヨハネスピレ2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.