web-dev-qa-db-fra.com

Ajout de champs personnalisés (post méta) avant/pendant wp_insert_post ()

Notre base de code a une tonne de logique qui s'exécute lorsque la publication est insérée/créée. Cependant, une partie de cette logique dépend de la post-méta personnalisée. Le seul moyen que je connaisse pour ajouter post meta à un nouveau post est comme suit:

$post_id = wp_insert_post($post_obj);
add_post_meta($post_id, 'key', "value");

Cependant, cela signifie que la méta de post n'est pas présente lorsque des crochets sur la post-insertion se produisent.

Existe-t-il un moyen de configurer ou d’ajouter des méta-publications dans le cadre de $post_obj?

J'ai essayé de créer de nouvelles propriétés de l'objet post avec $post_obj->custom_key = 'value', mais cela ne semblait pas réellement se retrouver dans la base de données. La seule chose à laquelle je peux penser est de détourner une propriété existante de l'objet de publication que je n'utilise pas, telle que menu_order, et de stocker certaines informations à cet endroit. C'est un bidule laid.

1
tobek

Vous pouvez accrocher votre fonction au hook wp_insert_post action:

add_action( 'wp_insert_post', 'wpse128767_add_meta' );
function wpse128767_add_meta( $post_id ) {
    add_post_meta( $post_id, 'key', 'value' );
}

Pour vous assurer que vos métadonnées ont été ajoutées avant l'exécution d'autres crochets d'insertion, attribuez-lui une priorité plus élevée:

add_action( 'wp_insert_post', 'wpse128767_add_meta', 1 );

Par défaut, add_action() utilise une priorité de 10; plus le nombre est bas, plus tôt il fonctionne.

2
Pat J