web-dev-qa-db-fra.com

Insérer automatiquement un champ personnalisé dans une publication de type publication personnalisée

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

2
Bryan Mc

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.

2
Otto

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');
2
Hameedullah Khan

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.

0
BigToe

Vous devriez accrocher post_save et vérifier quelques points:

  1. C'est votre type de message personnalisé
  2. Ce n'est pas une sauvegarde automatique
  3. Ce n'est pas une révision

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

            }
    }

}
0
MZAweb