web-dev-qa-db-ja.com

ページ削除を無効にする方法

私のクライアントはコンピュータ関係者ではありません。私は彼のためにウェブサイトを作りました。いくつかの重要なページがあります。私のクライアントは常にこのページを削除しています。それから私はコード(ページID)を再設定したいです。

特定のページの削除オプションを無効にする方法.

シモンズ:彼はこれらのページを編集することができるかもしれません。削除しないでください。

7
user8917

ユーザーが割り当てられているロールから、機能delete_pagesdelete_others_pages、およびdelete_published_pagesを削除できます。これにより、完全なユーザーロールがページを削除するのを防ぐことができます。

この動作を1人のユーザーだけに制限するには、専用の新しい役割を作成してそのユーザーに割り当てる必要があります。詳細はJustin Tadlockの Members プラグインを見てください。

例:管理者ロールからページを削除する機能を削除する

$role = get_role('administrator');
$role->remove_cap('delete_pages');
$role->remove_cap('delete_others_pages');
$role->remove_cap('delete_published_pages');

より多くのリソース

10
rofflox

Brian Fegterの答えはほぼ完璧です。

私のテストで彼の答えはあなたが "wp_trash_post"と "before_delete_post"にアクションを変更した場合にのみうまくいくでしょう。

function restrict_post_deletion($post_ID){
    $user = get_current_user_id();
    $restricted_users = array(21,25,54,2,19);
    $restricted_pages = array(2,21,52,64);
    if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
        echo "You are not authorized to delete this page.";
        exit;
    }
}
add_action('wp_trash_post', 'restrict_post_deletion', 10, 1);
add_action('before_delete_post', 'restrict_post_deletion', 10, 1);
5
Playforward

次のようにして、投稿をゴミ箱から削除することを禁止するアクションを作成できます。それはきれいではありませんが、それは動作します。手動でユーザーとページIDを入力する必要があります。

function restrict_post_deletion($post_ID){
    $user = get_current_user_id();
    $restricted_users = array(21,25,54,2,19);
    $restricted_pages = array(2,21,52,64);
    if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
        echo "You are not authorized to delete this page.";
        exit;
    }
}
add_action('trash_post', 'restrict_post_deletion', 10, 1);
add_action('delete_post', 'restrict_post_deletion', 10, 1);
3
Brian Fegter

あなたは非常に簡単にクイック編集とメタボックスの両方からごみ箱のリンクを隠すことができます。 1つはスタイルを使用し、もう1つはpost_row_actionsフィルタを使用して実行します(フィルタを使用しても実行できます - dunno) https://developer.wordpress.org/reference/hooks/post_row_actions/ /

//hide meta with styles
function hide_publishing_actions()
{
    global $post;
    if ($post_id == 21)
    {
        if (!current_user_can('administrator'))
        {
            // stuff here for non-admins
            echo '<style type="text/css">#delete-action</style>';
        }
    }
}

add_action('admin_head-post.php', 'hide_publishing_actions');
add_action('admin_head-post-new.php', 'hide_publishing_actions');

//for quick edit
add_filter('post_row_actions', 'remove_row_actions', 10, 1);
function remove_row_actions($actions)
{
    if (!current_user_can('administrator'))
    {
        if ($post_id == 21)
        unset($actions['edit']);
        unset($actions['view']);
        unset($actions['trash']);
        unset($actions['inline hide-if-no-js']);
    }
    return $actions;
}
0
DropHit

これが私がテストし、そのIDによって特定の投稿やページの削除を防ぐ方法の動作を見つけた例です。それはすべてのワードプレスユーザーのために働くはずです:

add_action('wp_trash_post', 'prevent_post_deletion');
function prevent_post_deletion($postid){
    $protected_post_id = 67586;
    if ($postid == $protected_post_id) {
        exit('The page you were trying to delete is protected.');
    }
}
0
Shahar Dekel