Ich versuche, ein Post-Meta nur zu aktualisieren, nachdem es gespeichert oder aktualisiert wurde.
Meine function ist ziemlich einfach
function update_test( $post_id ) { update_post_meta($post_id, 'copied', '1'); update_post_meta($post_id, 'blurb', 'this value updated by save_post action'); } add_action( 'save_post', 'update_test');
Wenn ich einen neuen Beitrag bei wp-admin/post-new.php
kann ich sehen, dass die Werte der beiden benutzerdefinierten Felder bereits aktualisiert wurden. Die Felder selbst existieren mit erweiterten benutzerdefinierten Feldern. Aber sollte nicht aktualisiert werden, bis der Beitrag veröffentlicht / gespeichert und aktualisiert wurde. Warum werden die Felder aktualisiert, sobald das Formular post-new.php geladen wird?
Ein Entwurf oder “leer” wird gespeichert, sobald Sie mit dem Erstellen eines neuen Posts beginnen. Diese neuen Posts haben den post_status
des auto-draft
. Überprüfen Sie dies, um zu verhindern, dass Ihr callback auf diese “leeren” Postspeicherungen abfeuert.
function update_test( $post_id, $post ) { if (isset($post->post_status) && 'auto-draft' == $post->post_status) { return; } update_post_meta($post_id, 'copied', '1'); update_post_meta($post_id, 'blurb', 'this value updated by save_post action'); } add_action( 'save_post', 'update_test', 1, 2);
Sie sollten auch nach den Konstanten DOING_AJAX
und DOING_AUTOSAVE
.