So aktualisieren Sie den Post-Inhalt im Batch mit dem benutzerdefinierten Post-Meta-Wert

Ich habe eine benutzerdefinierte Metabox , die WPAlchemy verwendet , in der ich mich entledigen will. Ich möchte jedoch alle Posts erhalten, die einen bestimmten benutzerdefinierten Meta-Wert festgelegt haben, und sie in den Anfang des Post-Contents einfügen und dann den Meta-Wert löschen.

Ich habe das Gefühl, dass mir dieser Beitrag nahe kommt, da ich erfolgreich Inhalte zum Anfang von Beiträgen hinzufügen konnte, aber nicht erfolgreich auf den benutzerdefinierten Metawert, nach dem ich gesucht habe, herankomme. Ich bin mir auch nicht ganz sicher, wann ich mich in WordPress einklinken und meine Aktionen ausführen soll.

Hat jemand Vorschläge, wie es am besten geht? Ich dachte, ich würde ein einfaches Plugin erstellen, es aktivieren, es machen lassen und es dann entfernen.

Solutions Collecting From Web of "So aktualisieren Sie den Post-Inhalt im Batch mit dem benutzerdefinierten Post-Meta-Wert"

Was ist mit so etwas bei Aktivierung?

function wpa47153_run_once(){ $posts = get_posts(array('numberposts' => -1) ); foreach($posts as $p) : $meta = get_post_meta($p->ID, 'meta_key',true); if($meta) : $my_post = array(); $my_post['ID'] = $p->ID; $my_post['post_content'] = $meta . "
" . $p->post_content ; // Update the post into the database wp_update_post( $my_post ); unset($my_post); //remove the meta key delete_post_meta($p->ID, 'meta_key'); endif; endforeach; }

wo get_posts und get_post_meta an deine Umstände angepasst werden.

Ich hätte das lieber als Kommentar zu helgathevikings Post gepostet, aber da ich auf dieser SE-Seite keinen Ruf habe, mache ich einen neuen Post. Fühlen Sie sich frei, es zu löschen, wenn Admins es nicht hilfreich finden.

Helgas Beispiel funktioniert fantastisch, aber Sie sollten auch wissen, dass, wenn Sie eine benutzerdefinierte speichern Handler eingerichtet, sagen Sie etwas wie unten, die auf Meta-Boxen im Post-Bildschirm überprüft und update speichert, löscht auf leere Werte, dann Helga Skript wird gelöscht all das andere Meta, wenn Sie den benutzerdefinierten Sicherungshandler nicht vorübergehend anhalten. Z.B:

 add_action('save_post', 'etm\save_custom_fields'); function save_custom_fields( $postId ) { //avoid accidental duplication return; //remove this when not using helga's function anylonger if( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; //add your custom meta fields here $fields = array( 'meta-key-1', 'meta-key-2', '...' ); foreach( $fields as $metaName ): //keep a flag if it's been updated $new = false; //get the existing value $old = get_post_meta( $postId, $metaName, true ); //update the flag with the new value if ( isset( $_POST[ $metaName ] ) ) { $new = $_POST[ $metaName ]; } //add/update or delete the meta if( $new && $new != $old ) { update_post_meta( $postId, $metaName, $new, $old ); //also acts to add } elseif( !$new ) { delete_post_meta( $postId, $metaName, $old ); } endforeach; } 

Ich habe gerade diesen Fehler auf einer Entwicklungsseite gemacht. Zum Glück habe ich die database gesichert, bevor ich das Helga-Skript ausführte (was einwandfrei funktioniert). Aber da ich wahrscheinlich nicht der einzige ist, der benutzerdefinierte Metaskripte / benutzerdefinierte Speicherverwaltung verwendet, dachte ich, dass dies eine wichtige Erinnerung ist.