Postmeta für benutzerdefinierten Posttyp kann nicht über Aktion mit save_post-Hook gespeichert oder aktualisiert werden

Ich versuche, ein benutzerdefiniertes Feld zu aktualisieren, indem ich mich in die save-post Aktion einklinke, aber aus Gründen, die ich nicht herausfinden kann, funktioniert es nicht.

Die folgende function wird in der functions.php des Themes platziert:

 function save_address_meta() { $meta = get_post_meta( get_the_ID() ); $address = $meta['address']; update_post_meta(get_the_ID(), $address, 'test'); } add_action( 'save_post', 'save_address_meta', 50 ); 

Ich habe auch versucht pre_post_update zu verwenden, da ich verstehe, dass save_post nicht wirklich save_post wird, wenn nicht etwas anderes als ein benutzerdefiniertes Feld in der Post aktualisiert wird – aber auch kein Glück mit diesem.

Ich habe ein paar Stunden damit zugebracht, auf Stackexchange und verschiedenen anderen Quellen online nach Lösungen zu suchen, aber ich komme einfach nicht richtig. Dies ist eine verdummte Version des ursprünglichen Codes, aber selbst in diesem Grundzustand scheint es nicht zu funktionieren.

Im Grunde versuche ich, das betreffende benutzerdefinierte Feld zu erhalten, und aktualisiere es dann mit einem Zeichenfolgenwert.

Wenn ich das $meta Array print_r , wird der benutzerdefinierte print_r wie folgt in einem Array angezeigt:

  [address] => Array ( [0] => 50 Call Lane Leeds LS1 6DT United Kingdom ) 

Ich habe auch versucht, auf dieses benutzerdefinierte Feld in der obigen function mit $address = $meta['address'][0] zuzugreifen.
Ich kann den Wert des Schlüssels auf diese Weise wiedergeben, aber wenn ich mich nicht irre, ist es der Schlüssel, auf den ich verweisen muss, damit der String im 3. Argument den Wert wie beabsichtigt aktualisiert.

Solutions Collecting From Web of "Postmeta für benutzerdefinierten Posttyp kann nicht über Aktion mit save_post-Hook gespeichert oder aktualisiert werden"

Versuchen Sie, update_post_meta(get_the_ID(), $address, 'test'); ändern update_post_meta(get_the_ID(), $address, 'test'); update_post_meta(get_the_ID(), 'address', 'test');

Der save_post Hook wird save_post , wenn WordPress einen Post in der database speichert. Dies beinhaltet das Speichern von WP-Revisionen, die eine andere Post-ID als die tatsächliche Post haben. Es ist sehr wahrscheinlich, dass Sie das Post-Meta zu einer Revision anstatt zu dem eigentlichen Post erhalten und speichern.

Der save_post Hook übergibt beim save_post einige Variablen, einschließlich der Post-ID, sodass Sie die function get_the_ID() nicht verwenden müssen.

 function wpse_261414_save_post( $post_id, $post, $update ) { //* Make sure this isn't a post revision if( wp_is_post_revision( $post_id ) ) { return; } $meta = get_post_meta( $post_id ); $address = $meta[ 'address' ]; update_post_meta( $post_id, $address, 'test' ); } add_action( 'save_post', 'wpse_261414_save_post', 10, 3 ); 

Warum versuchst du nicht so etwas?

 function save_address_meta() { global $post; if($post->post_type == 'your-custom-post-type'){ $address_field = 'test'; //Get your address field here update_post_meta($post->ID, 'address', 'test'); } } add_action( 'save_post', 'save_address_meta' ); 

Und Sie können Ihren Feldwert an anderer Stelle erhalten, zum Beispiel innerhalb der Schleife als;

 $address = get_post_meta($post->ID, 'address', true);