web-dev-qa-db-fra.com

Metabox enregistre lors de la mise à jour ou de la publication, mais pas lors de l'enregistrement du brouillon

J'ai créé des types de publication personnalisés qui ont également des méta_boxes personnalisées que j'ai créées. Actuellement, ils enregistrent lorsque je publie ou met à jour un message, mais pas lorsque je suis en mode brouillon en train d'apporter des modifications.

add_action('save_post', 'save_details');

function save_details(){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
    return $post_id;
}
global $post;
if ($post->post_type == 'events') { // Check to see if Event Type.
    update_post_meta($post->ID, "event_featuring", $_POST["event_featuring"]);
    update_post_meta($post->ID, "event_time", $_POST["event_time"]);
    update_post_meta($post->ID, "event_date", $_POST["event_date"]);
    update_post_meta($post->ID, "event_end_date", $_POST["event_end_date"]);
    update_post_meta($post->ID, "event_location", $_POST["event_location"]);
    update_post_meta($post->ID, "empid", $_POST["empid"]);
    update_post_meta($post->ID, "bhs_event", $_POST["bhs_event"]);
}
}

J'ai essayé d'utiliser wp_insert_post_data au lieu de save_post, mais j'ai eu le problème opposé. Cela économiserait sur les brouillons, mais la publication du poste ne fonctionnerait plus. Que dois-je faire différemment pour pouvoir mettre à jour un brouillon (avant publication) et le sauvegarder?

1
rmlumley

Vous avez donc d'abord essayé de vous connecter à wp_insert_post_data et pouviez enregistrer les métadonnées lors de l'enregistrement des brouillons, mais pas lors de la publication. Ensuite, vous avez essayé de vous connecter à save_post et vous pouviez enregistrer des métadonnées lors de la publication, mais pas lors de la sauvegarde des brouillons.

La solution la plus simple serait de l’accrocher aux deux.

add_action('save_post', 'save_details');
add_action('wp_insert_post_data', 'save_details');

Modifier

save_post et wp_insert_post_data sont appelés en même temps et transmettent deux paramètres aux fonctions de rappel. Dans le source, cela ressemble à ceci:

do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);

Mais votre fonction n'accepte aucun paramètre. Cela fera échouer return $post_ID et entraînera probablement d'autres problèmes.

Tu aurais dû:

function save_details( $post_ID, $post ) {
    ...
}

Et votre crochet devrait être:

add_action( 'save_post', 'save_details', 10, 2 );

Cela passera à la fois $post_ID et $post dans votre fonction et devrait rendre les choses plus faciles.

1
EAMann

J'avais un problème similaire qui, je pense, a été déclenché par la mise à niveau de Wordpress vers la version 3.1, bien que je n'ai pas eu l'occasion de revenir en arrière pour vérifier. J'ai changé mon code pour passer les $ post_id et $ post comme ci-dessus en prenant soin de passer le paramètre 1,2 au lieu de 10, 2 comme ci-dessus, ce qui a résolu le problème. l'ajout d'un hook à wp_insert_post n'a pas fonctionné pour moi et m'a généré des erreurs lors de l'ajout d'un nouveau message personnalisé.

J'espère que cette aide. Ma première réponse est désolée si je ne suis pas claire.

1
Manish