Existe-t-il un crochet qui est déclenché uniquement lorsque le message est "publié" pour la première fois?.
Je ne veux pas exécuter mon code lorsque la publication est "mise à jour" ou lorsque son statut est défini sur "non publié" puis à nouveau "publié".
MODIFIER:
add_action('draft_to_published','func_tion');
function func_tion($post){
$post_id = $post->ID;
if ( !get_post_meta( $post_id, 'mycoderan', $single = true ) )
// run code to manipulate data
wp_enqueue_script('plugin_name',plugin_dir_url(__FILE__ ).'script.js');
$params = array() // set parameters
wp_localize_script('plugin_name', 'params', $params );
update_post_meta( $post_id, 'mycoderan', true );
}
Les crochets {$old_status}_to_{$new_status}
et {$new_status}_{$post->post_type}
ont tendance à résoudre généralement le problème.
Pour éviter d'exécuter le code si le statut de la publication est changé en brouillon, puis publié à nouveau (après avoir déjà été publié), implémentez un simple indicateur à l'aide de la fonctionnalité post_meta
.
Note : le hook mis à jour devrait être 'draft_to_publish' au lieu de 'draft_to_published'. Cependant, le code ci-dessous n'est pas modifié et devrait l'être si vous prévoyez d'utiliser WP 3.5
add_action( 'draft_to_published', 'wpse47566_do_once_on_publish' );
function wpse47566_do_once_on_publish( $post ) {
// check post type if necessary
if ( $post->post_type != 'a_specific_type' ) return;
$post_id = $post->ID;
if ( !get_post_meta( $post_id, 'mycoderan', $single = true ) ) {
// ...run code once
update_post_meta( $post_id, 'mycoderan', true );
}
}