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.
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.
$role = get_role('administrator');
$role->remove_cap('delete_pages');
$role->remove_cap('delete_others_pages');
$role->remove_cap('delete_published_pages');
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);
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);
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;
}
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.');
}
}