it-swarm.com.de

Aktualisieren von Post-Inhalten mit benutzerdefinierten Post-Meta-Werten im Batch

Ich habe eine benutzerdefinierte Meta-Box, mit WPAlchemy , in der ich suchen, um loszuwerden. Ich möchte jedoch alle Posts abrufen, für die ein bestimmter benutzerdefinierter Meta-Wert festgelegt wurde, und ihn am Anfang des Post-Inhalts einfügen und dann den Meta-Wert löschen.

Ich habe das Gefühl, dass dieser Beitrag mich näher bringt, da ich den Inhalt erfolgreich an den Anfang der Beiträge anfügen konnte, aber nicht erfolgreich auf den von mir gewünschten benutzerdefinierten Meta-Wert zugegriffen und diesen hinzugefügt habe. Ich bin mir auch nicht sicher, wann ich mich in WordPress einklinken und meine Aktionen ausführen soll.

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

2
Luke

was ist mit so etwas bei der 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 . "<br/>"  . $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; 


}

dabei werden get_posts und get_post_meta an Ihre Umstände angepasst.

3
helgatheviking

Ich hätte dies lieber als Kommentar zu helgathevikings Post gepostet, aber da ich auf dieser SE-Site keinen guten Ruf habe, erstelle ich einen neuen Post. Fühlen Sie sich frei, es zu löschen, wenn der Administrator es nicht hilfreich findet.

Das Beispiel von Helga funktioniert fantastisch, aber Sie sollten sich auch bewusst sein, dass wenn Sie einen benutzerdefinierten Save-Handler eingerichtet haben, im Post-Bildschirm nach Meta-Feldern sucht und das Update speichert, leere Werte löscht und das Skript von Helga gelöscht wird alle anderen Metas, wenn Sie den benutzerdefinierten Speicherhandler 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 diesen Fehler gerade auf einer Entwicklungsseite gemacht. Zum Glück habe ich die Datenbank gesichert, bevor ich das Skript von Helga ausgeführt habe (das von selbst einwandfrei funktioniert). Da ich jedoch wahrscheinlich nicht der einzige bin, der benutzerdefinierte Metaskripte/die benutzerdefinierte Speicherverarbeitung verwendet, hielt ich dies für eine wichtige Erinnerung.

1
Elliott Post