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?
Il y a deux problèmes avec votre extrait de code:
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 ) {
où ==
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()
.
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.