web-dev-qa-db-fra.com

Comment changer le statut de publication de publication en brouillon en utilisant hook dans wordpress?

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.

1
Ghanashyam Naik

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

    }

}
1
jas

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 );
}
0
Nathan Johnson