Je cherchais un moyen d'insérer automatiquement un champ personnalisé lors de la publication d'un type d'article personnalisé. Et j'ai trouvé à plusieurs reprises la même solution, à partir d'ici:
http://pippinspages.com/tutorials/publish-action-hook-for-custom-post-types/
J'ai essayé cela et pour une raison quelconque, cela ne fonctionne tout simplement pas pour moi. J'ai un type de message personnalisé appelé sales_pages
Voici mon code:
// function to be executed when a custom post type is published
function run_when_post_published($post_ID)
{
// your function code here
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
add_post_meta($post_ID, 'field-name', 'custom value', true);
}
}
// replace {custom_post_type_name} with the name of your post type
add_action('new_to_publish_sales_pages', 'run_when_post_published');
add_action('draft_to_publish_sales_pages', 'run_when_post_published');
add_action('pending_to_publish_sales_pages', 'run_when_post_published');
Pouvez-vous me donner un indice sur ce qui ne va pas?
Je l'ai confirmé en travaillant avec les postes réguliers (avec le post publication hooks bien sûr). Cela ne fait tout simplement pas la même chose pour mes types de publication personnalisés.
Merci d'avance pour tout conseil.
A bientôt, Bryan
Il n'y a pas de hook d'action {$ old_status} sur {$ new_status} _ {$ post_type}. Examinez la fonction wp_transition_post_status pour voir quels types de points d'ancrage vous pouvez utiliser ici.
À la place, utilisez simplement le hook générique transition_post_status. Il récupère les anciens et nouveaux statuts (afin que vous puissiez examiner le statut des modifications) et l'objet $ post lui-même, pour vous permettre d'examiner le $ post-> post_type.
Comme Otto l'a dit, il n'y a pas de hook {{old_status} à $ {new_status} _ $ {post_type}, mais vous pouvez utiliser le new_to_publish, draft_to_publish et waiting_to_publish pour ajouter la méta de publication sur vos publications personnalisées.
// function to be executed when a custom post type is published
function run_when_post_published($post)
{
// your function code here
global $wpdb;
if(!wp_is_post_revision($post->ID) && $post->post_type == 'sales_pages') {
add_post_meta($post->ID, 'field-name', 'custom value', true);
}
}
// replace {custom_post_type_name} with the name of your post type
add_action('new_to_publish', 'run_when_post_published');
add_action('draft_to_publish', 'run_when_post_published');
add_action('pending_to_publish', 'run_when_post_published');
Bien que je ne sois pas un expert, voici quelques idées:
Avez-vous essayé update_post_meta au lieu de add_post_meta? Si le champ personnalisé existe déjà, add_post_meta n'aura probablement aucun effet.
Êtes-vous sûr que sales_pages est le "post slug", qui n'est pas nécessairement identique au nom du type de post personnalisé? Je me souviens d'avoir eu du mal à essayer de comprendre ce qu'est le "post slug". Malheureusement, j'ai oublié la réponse.
Vous devriez accrocher post_save
et vérifier quelques points:
Quelque chose comme:
add_action('save_post', 'my_custom_save');
function my_custom_save( $post_id ){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
if ( 'your_custom_post_type' == $_POST['post_type'] ){
if (!wp_is_post_revision($post_id)){
add_post_meta($post_ID, 'field-name', 'custom value', true);
}
}
}