Wie kann verhindert werden, dass ein Beitrag gelöscht wird?

8

Für Überwachungsprobleme möchte ich nur, dass ein Beitrag verworfen, aber nicht gelöscht werden kann - für alle Benutzer.

Also ich habe ein Plugin wie

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

Es scheint jedoch, dass nicht alle Löschaktionen ajax sind, sodass ein schwarzer Bildschirm mit der Rückgabe einer Fehlerseite mit dem Ergebnis "0" angezeigt wird.

In Bezug auf die Funktionen ist der obige Code in Ordnung, aber gibt es einen besseren Weg?

Yoga
quelle

Antworten:

9

Lass die Aktion nicht sterben, leite sie einfach weiter (wohin du willst):

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);
tfrommen
quelle
Qui alt, ich weiß, aber wie funktioniert das mit AJAX-Aufrufen und XML-RPC-Anfragen? Ich denke nicht, dass in diesen Fällen die Umleitung die richtige Lösung ist.
Andrea Sciamanna
5

Ich würde den Hook before_delete_postals letzte Schutzschicht gegen Löschen verwenden (mit der Lösung von @ tf, und das ist die richtige Antwort).

Und entfernen Sie zuerst die Optionen "Löschen" aus dem Blickfeld. Im Folgenden werden die Massenaktionen und die Schaltfläche " Papierkorb leeren" ausgeblendet und die Aktion " Dauerhaft löschen" entfernt .

Vor

Mit diesem Code:

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

Das ist das Ergebnis:

nach

Hinweis von Interesse

Es gibt keinen Haken cpt_row_actions. Die Hooks page_row_actionsund post_row_actionswerden angewendet, wenn der Beitragstyp hierarchisch ist oder nicht .

brasofilo
quelle
Mkay. +1 an Sie und @tf. Ich konnte seinen Einzeiler vorher nicht positiv bewerten, da weitere Informationen ausstehen und ich seine Qualität nur durch weitere Untersuchungen zu diesem Thema hätte beurteilen können. Noch eine Antwort, die gründlich in einen Zusammenhang gebracht wurde.
Johannes Pille