web-dev-qa-db-fra.com

Empêcher la page d'accueil d'être supprimée/déplacée vers la corbeille

Je veux empêcher que ma page d'accueil soit supprimée/déplacée dans la corbeille en utilisant ceci:

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

Le problème est que l'ID de l'option ('page_on_front') est passé de 7 (qui est mon ID de page souhaitée) à 0 lorsque je clique sur "Corbeille" afin qu'il ne corresponde jamais à l'ID de page de garde et déplace ma page vers la corbeille.

Et si je le change en:

    if( $post_id === 7 ...

La page n'est pas déplacée dans la corbeille, mais l'ID de l'option ('page_on_front') est remplacé par 0.

Comment empêcher l'option ('page_on_front') d'être modifiée en 0 afin que ma page d'accueil reste la même et ne puisse pas être supprimée?

2
Edd Clark

Il y a deux problèmes avec votre extrait de code:

1) comparaison

Le premier problème est dans cette ligne:

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

où vous comparez strictement int à string.

Notez que la comparaison === ne renverra TRUE que si les deux variables sont du même type et ont la même valeur .

Essayez ceci à la place:

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

== effectuera une conversion de type ou utilisera simplement la conversion de type (int):

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

Vous pouvez également utiliser intval() .

2) priorité

Le deuxième problème est le rappel priorité . Vous devez exécuter vos rappels plus tôt, par exemple, avec la priorité 1 au lieu du 10 par défaut:

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

J'espère que cela t'aides.

1
birgire