webentwicklung-frage-antwort-db.com.de

Verhindert, dass die Startseite gelöscht/in den Papierkorb verschoben wird

Ich möchte verhindern, dass meine Startseite gelöscht/in den Papierkorb verschoben wird:

add_action( 'wp_trash_post',      'tcb_page_delete_check' );
add_action( 'before_delete_post', 'tcb_page_delete_check' );
function tcb_page_delete_check( $post_id ){
    $frontpage = get_option( 'page_on_front');
    $blogpage = get_option('page_for_posts'); 
      if( $post_id === $frontpage || $post_id === $blogpage ) {
        wp_redirect(admin_url('edit.php?post_type=page'));
        exit;
      }
}

Das Problem ist, dass die ID der Option ('page_on_front') von 7 (das ist meine gewünschte Frontpage-ID) auf 0 geändert wird, wenn ich auf "Trash" klicke, damit sie niemals mit der Frontpage-ID übereinstimmt und meine Seite in den Papierkorb verschiebt.

Und wenn ich es ändere:

    if( $post_id === 7 ...

Die Seite wird nicht in den Papierkorb verschoben, aber die ID der Option ('page_on_front') wird in 0 geändert.

Wie verhindere ich, dass die Option ('page_on_front') auf 0 gesetzt wird, damit meine Startseite unverändert bleibt und nicht in den Papierkorb verschoben wird?

2
Edd Clark

Es gibt zwei Probleme mit Ihrem Code-Snippet:

1) Vergleich

Das erste Problem ist in dieser Zeile:

  if( $post_id === $frontpage || $post_id === $blogpage ) {

wo Sie streng int mit string vergleichen.

Beachten Sie, dass === compare nur TRUE zurückgibt, wenn beide Variablen vom selben Typ sind und denselben Wert haben.

Versuchen Sie dies stattdessen:

  if( $post_id == $frontpage || $post_id == $blogpage ) {

wobei == eine Typkonvertierung durchführt oder einfach die (int)-Typumwandlung verwendet:

  if( $post_id === (int) $frontpage || $post_id === (int) $blogpage ) {

Sie können auch intval() verwenden.

2) Priorität

Das zweite Problem ist die Callback-Priorität . Sie sollten Ihre Rückrufe früher ausführen, z. B. mit der Priorität 1 anstelle des Standardcodes 10:

add_action( 'wp_trash_post',      'tcb_page_delete_check', 1 );
add_action( 'before_delete_post', 'tcb_page_delete_check', 1 );

Hoffe das hilft.

1
birgire