Come impedire l'eliminazione di un post?


8

Per problemi di auditing, voglio solo che un post possa essere cestinato, ma non cancellato, per tutti gli utenti.

Quindi ho un plugin come

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

Ma sembra che non tutte le azioni di eliminazione siano ajax, quindi verrà mostrata una schermata nera con ritorno a una pagina di errore con risultato "0"

Per quanto riguarda le funzionalità, il codice sopra è ok, ma esiste un modo migliore?

Risposte:


9

Non lasciare che l'azione muoia, fai solo un reindirizzamento (verso dove vuoi):

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);

Molto vecchio, lo so, ma come funziona con le chiamate AJAX e le richieste XML-RPC? Non penso che in questi casi il reindirizzamento sia la soluzione giusta.
Andrea Sciamanna,

5

Vorrei usare l'hook before_delete_postcome ultimo livello di protezione contro la cancellazione (usando la soluzione di @ tf, e quale è la risposta corretta).

E prima rimuovere le opzioni "Elimina" dalla vista. Quanto segue nasconde le azioni in blocco e il pulsante Svuota cestino e rimuove l' azione Elimina riga in modo permanente .

prima

Con questo codice:

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; 
}

Questo è il risultato:

dopo

Nota di interesse

Non c'è gancio cpt_row_actions. Gli hook page_row_actionse post_row_actionsvengono applicati se il tipo di post è gerarchico o meno , rispettivamente.


Mkay. +1 a te e a @tf. Non ho potuto votare prima la sua prima, perché ulteriori informazioni in attesa avrei potuto valutare la sua qualità solo con ulteriori ricerche sull'argomento. Ancora un'altra risposta completamente messa in contesto.
Johannes Pille,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.