Je souhaite modifier le statut de publication déjà publiée en brouillon à l'aide de son identifiant.
add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
$my_post = array(
'ID' => 1,
'post_status' => 'draft',
);
// unhook this function so it doesn't loop infinitely
remove_action('save_post', 'change_post_status');
if( $post_id == 1 ){
wp_update_post( $my_post );
}
// re-hook this function
add_action('save_post', 'change_post_status');
}
Je souhaite modifier le statut d'un message spécifique dont l'id = 1 doit être modifié en brouillon.Il fonctionne mais entraîne
Niveau maximum d'imbrication des fonctions de '100' atteint, abandon!
pourquoi obtient-il cette erreur?
Ce que je pense, c’est qu’il est en cours d’exécution lorsque post est mis à jour ou enregistré, je souhaite simplement exécuter la fonction indépendamment de l’enregistrement ou de l’action de mise à jour, comme sur wp_init
ou wp_admin
ou admin_init
avec un autre crochet, est-ce possible.
Dans votre functions.php
:
add_action('publish_post', 'check_user_publish', 10, 2);
function check_user_publish ($post_id, $post) {
if($post_id == 1){
$query = array(
'ID' => $post_id,
'post_status' => 'draft',
);
wp_update_post( $query, true );
}
}
Pour supprimer un crochet, il doit avoir la même priorité que lorsque vous ajoutez le crochet. Vous add_action avec une priorité de 1. Si vous souhaitez supprimer l'action, vous devez la supprimer avec une priorité de 1. Voir le codex .
add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
$my_post = array(
'ID' => 1,
'post_status' => 'draft',
);
// unhook this function, making sure to use the same priority, so it doesn't loop infinitely
remove_action('save_post', 'change_post_status', 1 );
if( $post_id == 1 ){
wp_update_post( $my_post );
}
// re-hook this function with the initial priority
add_action('save_post', 'change_post_status', 1 );
}