web-dev-qa-db-fra.com

Comment désactiver la suppression de page

Mon client n'est pas un informaticien. J'ai créé un site web pour lui. Il y a quelques pages importantes. Mon client est toujours supprimer cette page. Ensuite, je veux reconfigurer le code (l'identifiant de la page).

Comment puis-je désactiver les options de suppression pour des pages particulières.

PS: Il peut peut-être éditer ces pages. Pas supprimer.

7
user8917

Vous pouvez supprimer les capacités delete_pages, delete_others_pages et delete_published_pages du rôle auquel l'utilisateur est affecté. Cela empêchera le rôle d'utilisateur complet de supprimer des pages.

Pour limiter ce comportement à un seul utilisateur, vous devez créer et attribuer un nouveau rôle dédié à l'utilisateur. Regardez le Membres plugin de Justin Tadlock pour plus d'informations.

Exemple: Supprimer la possibilité de supprimer des pages du rôle d'administrateur

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

Plus de ressources

10
rofflox

La réponse de Brian Fegter est presque parfaite.

Dans mes tests, sa réponse ne fonctionnera que si vous modifiez les actions en "wp_trash_post" et "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

Vous pouvez créer une action pour empêcher les utilisateurs de supprimer ou supprimer des publications de la manière suivante. Ce n'est pas la plus jolie, mais ça marche. Vous devrez renseigner manuellement l'utilisateur et les identifiants de page.

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

Vous pouvez très facilement masquer les liens de la corbeille à la fois dans l'éditeur rapide et dans la boîte méta. FAITES l’un en utilisant les styles et l’autre en utilisant le filtre post_row_actions (vous pourrez peut-être utiliser le filtre - 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

Voici un exemple que j'ai testé et trouvé efficace pour empêcher la suppression d'un message ou d'une page spécifique par son ID. Cela devrait fonctionner pour tous les utilisateurs de wordpress:

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