web-dev-qa-db-de.com

Hinzufügen von benutzerdefinierten Feldern (Post-Meta) vor/während wp_insert_post ()

Unsere Codebasis enthält eine Menge Logik, die ausgeführt wird, wenn der Beitrag eingefügt/erstellt wird. Ein Teil dieser Logik hängt jedoch von benutzerdefinierten Post-Metas ab. Der einzige Weg, wie ich Post-Meta zu einem neuen Post hinzufügen kann, ist folgender:

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

Dies bedeutet jedoch, dass das Post-Meta nicht vorhanden ist, wenn Hooks beim Einfügen von Posts auftreten.

Gibt es eine Möglichkeit, Post-Meta als Teil von $post_obj einzurichten oder einzuschließen?

Ich habe versucht, neue Eigenschaften des Post-Objekts mit $post_obj->custom_key = 'value' zu erstellen, aber es schien nicht wirklich in der Datenbank zu landen. Das einzige, was ich mir vorstellen kann, ist, eine vorhandene Eigenschaft des Post-Objekts, das ich nicht verwende, wie menu_order, zu hijacken und dort einige Informationen zu speichern. Das ist ein hässlicher Hack.

1
tobek

Sie können Ihre Funktion mit dem Hook wp_insert_post action verknüpfen:

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

Um sicherzustellen, dass Ihre Metadaten hinzugefügt wurden, bevor andere Insert-Hooks ausgeführt werden, weisen Sie ihnen eine höhere Priorität zu:

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

Standardmäßig verwendet add_action() die Priorität 10. Je niedriger die Zahl, desto früher läuft es.

2
Pat J