web-dev-qa-db-fra.com

Quel crochet devrait être utilisé pour créer par programme une publication uniquement lorsque la publication principale est mise à jour?

Pippin et Jean-Baptiste Jung ont de très bons tutoriels sur la création de contenu par programmation lorsqu'un nouveau message est publié à l'aide de ces quatre crochets d'actions ...

  • publier {post_type}
  • add_action ('new_to_publish_ {post_type},
  • add_action ('draft_to_publish_ {post_type},
  • add_action ('pending_to_publish_ {post_type}

... pour exécuter ce script ...

global $user_ID;
$new_post = array(
    'post_title' => 'My New Post',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publish',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'post',
    'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

Quel crochet devrais-je utiliser pour faire cette fonctiononlylorsqu'un message est mis à jour? Je vous remercie!

2
torinagrippa

vous pouvez utiliser le crochet d'action pre_post_update comme suit:

add_action('pre_post_update','post_updating_callback');
function post_updating_callback($post_id){
    global $post;
    // verify if this is an auto save routine. 
    // If it is our form has not been submitted, so we dont want to do anything
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return;
    if ($post->post_status == "publish"){
        //do update stuff here.
    }
}

Mettre à jour:

au lieu de wp_insert_post(), utilisez wp_update_post comme ceci:

//first get the original post
$postarr = get_post($post_id,'ARRAY_A');

//then set the fields you want to update
$postarr['post_title'] = "new title";
$postarr['post_content'] = "new edited content";

$post_id = wp_update_post($postarr);

de cette façon, il vous suffit de spécifier les champs mis à jour et de ne jamais vous soucier d'éléments tels que le type de publication d'origine.

8
Bainternet

Ces deux pourraient être vos amis:

add_action('edit_post','your_action');

add_action('pre_post_update','your_action');

Voir: Référence d'action: Actions de publication, de page, de pièce jointe et de catégorie pour plus d'inspiration ...

PS Cela dépend du contexte, mais envisagez également d'utiliser wp_update_post à la place wp_insert_post .

2
Michal Mau