Wie triggern Sie, Post beim Aktualisieren von Post-Meta zu speichern

Ich habe die Situation sehr verwirrt. Ich habe Beiträge und alle Beiträge metas von einer Website db zu einer anderen hinzugefügt, alles ist in Ordnung, Bilder, Titel, Beschreibung der Beiträge sind da.

Aber Post-Metas werden nicht auf der Webseite angezeigt (img1), obwohl sie existieren, wenn ich auf die Post-Bearbeitungsseite in wp-admin (img2) gehe, kann ich die Post-Daten sehen, aber sie werden nicht angezeigt, bis ich auf 'Update' klicke knöpfe mich selbst.

Danach werden alle Postdaten angezeigt. (Img3, img4)

Beiträge sind zu viel (ca. 4000 Rezepte), also kann ich es nicht manuell machen, es wird lange dauern.

Ich brauche also etwas, um jeden Post automatisch zu aktualisieren.

Ich habe versucht, post meta zu aktualisieren, aber es funktioniert nicht, es muss Post immer noch manuell aktualisieren.

 $metas = get_post_meta(get_the_ID()); foreach($metas as $meta_key => $meta_value){ foreach( $meta_value as $val ){ update_post_meta( get_the_ID(), $meta_key, $val); } } 

Gibt es eine Möglichkeit, das zu tun?

IMG1 img1

IMG2 img2

IMG3 img3

IMG4 img4

Solutions Collecting From Web of "Wie triggern Sie, Post beim Aktualisieren von Post-Meta zu speichern"

Ich habe dies verwendet, um Posts mit ACF / Postmetadaten erfolgreich einzufügen, aber bitte testen Sie es auf einer Entwicklungssite, bevor Sie es live bereitstellen, da könnte es einige schreckliche Annahmen geben. Im Allgemeinen wird davon ausgegangen, dass Sie nur jeden Namen einmal haben, das heißt “mein Feld” existiert nicht in zwei Feldgruppen mit unterschiedlichen Bedeutungen.

 $mycustomvalue = 123; $f_mycustomfield = get_acf_key_by_name("mycustomfield"); update_post_meta( $postid, "mycustomfield", $mycustomvalue ); update_post_meta( $postid, "_mycustomfield", $f_mycustomfield["key"] ); function load_acf_names2key() { global $acf_names2key; $acf_names2key = array(); $posts = get_posts(array( 'numberposts' => -1, 'post_type' => 'acf', 'orderby' => 'menu_order title', 'order' => 'asc', 'suppress_filters' => false, )); foreach($posts as $fieldgroup) { $fields = get_post_meta( $fieldgroup->ID ); foreach($fields as $fieldkey => $fieldmeta) { if(substr($fieldkey, 0, 6) == "field_") { $field = get_post_meta( $fieldgroup->ID, $fieldkey); foreach($field as $subfield) { if(!array_key_exists($subfield["name"], $acf_names2key)) $acf_names2key[ $subfield["name"] ] = array(); $subfield[ "group" ] = $fieldgroup->post_name; array_push( $acf_names2key[ $subfield["name"] ], $subfield ); } } } } } function get_acf_key_by_name($name, $options = array()) { global $acf_names2key; if(!$acf_names2key || !is_array($acf_names2key) || count($acf_names2key) == 0) { load_acf_names2key(); } if(!array_key_exists($name, $acf_names2key)) return false; foreach($acf_names2key[ $name ] as $possible) { foreach($options as $key => $val) { if(preg_match("!^/.*/i?$!", $val)) { if(!preg_match($val, $possible[ $key ])) { continue 2; } } else if($possible[ $key ] != $val) { continue 2; } } # no options? this will return the first one # has options? will return the first item that # satisfies all options return $possible; } return false; } 

Es ist schon eine ganze Weile her, dass ich das geschrieben habe und mir der Speicher misslingt, was genau ich mit diesen $ get_acf_key_by_name wollte, die an get_acf_key_by_name (oder wenn ich einfach den Code von irgendwoher kopierte), aber es funktionierte immer für mich. Ich habe nicht versucht mit Repeater-Feldern zu arbeiten, also könnte das eine Herausforderung sein, aber versuche es.