web-dev-qa-db-ger.com

So deaktivieren Sie das Löschen von Seiten

Mein Kunde ist keine Computerperson. Ich habe eine Website für ihn erstellt. Es gibt einige wichtige Seiten. Mein Kunde ist immer diese Seite löschen. Dann möchte ich den Code (die Seiten-ID) neu konfigurieren.

Wie deaktiviere ich die Löschoptionen für bestimmte Seiten?.

PS: Er kann diese Seite möglicherweise BEARBEITEN. Nicht löschen.

7
user8917

Sie können die Funktionen delete_pages, delete_others_pages und delete_published_pages aus der Rolle entfernen, der der Benutzer zugewiesen ist. Dadurch wird verhindert, dass die gesamte Benutzerrolle Seiten löscht.

Um dieses Verhalten nur auf einen Benutzer zu beschränken, müssen Sie dem Benutzer eine dedizierte neue Rolle zuweisen. Weitere Informationen finden Sie im Members Plugin von Justin Tadlock.

Beispiel: Entfernen Sie die Möglichkeit, Seiten aus der Administratorrolle zu löschen

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

Mehr Ressourcen

10
rofflox

Die Antwort von Brian Fegter ist fast perfekt.

In meinem Test funktioniert seine Antwort nur, wenn Sie die Aktionen in "wp_trash_post" und "before_delete_post" ändern.

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

Sie können wie folgt eine Aktion erstellen, um zu verhindern, dass Benutzer Beiträge in den Papierkorb werfen oder löschen. Es ist nicht das Schönste, aber es funktioniert. Sie müssen die Benutzer- und Seiten-IDs manuell eingeben.

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

Sie können die Papierkorb-Links sehr einfach sowohl vor der Schnellbearbeitung als auch vor der Meta-Box verbergen. Verwenden Sie einen der Stile und den anderen den Filter post_row_actions (möglicherweise können Sie beides mit dem Filter tun - keine Ahnung) 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

Hier ist ein Beispiel, das ich getestet habe und das funktioniert, um das Löschen eines bestimmten Posts oder einer bestimmten Seite anhand der ID zu verhindern. Es sollte für alle WordPress-Benutzer funktionieren:

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