web-dev-qa-db-fra.com

Comment mettre à jour par lots le contenu d'un article avec une méta valeur personnalisée

J'ai une méta-boîte personnalisée, en utilisant WPAlchemy , dans laquelle je cherche à me débarrasser. Cependant, je voudrais obtenir toutes les publications qui ont un ensemble de méta-valeurs personnalisées spécifiques, l'insérer dans le début du contenu de la publication, puis supprimer la méta-valeur.

J'ai le sentiment ce message me rapproche, car j'ai pu ajouter du contenu avec succès au début des messages, mais l'accès et l'ajout de la méta-valeur personnalisée que j'ai après ont été infructueux. Je ne sais pas trop non plus quand il faudra utiliser WordPress pour effectuer mes actions.

Quelqu'un a des suggestions sur la meilleure façon de s'y prendre? J'ai pensé construire un plugin simple, l'activer, le laisser faire son travail, puis le supprimer.

2
Luke

qu'en est-il de quelque chose comme ça lors de l'activation?

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; 


}

où get_posts et get_post_meta sont adaptés à votre situation.

3
helgatheviking

J'aurais plutôt posté cela comme un commentaire dans le message de helgatheviking, mais comme je n'ai aucune réputation sur ce site SE, je fais un nouveau message. N'hésitez pas à le supprimer si les administrateurs ne le trouvent pas utile.

L'exemple d'Helga fonctionne à merveille, mais vous devez également savoir que si vous avez un gestionnaire de sauvegarde personnalisé, dites quelque chose comme ci-dessous qui vérifie la présence de méta-boîtes dans l'écran de publication et enregistre la mise à jour, supprime les valeurs vides, puis le script de helga sera effacé toutes les autres méta si vous ne mettez pas temporairement en pause le gestionnaire de sauvegarde personnalisé. Par exemple:

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;     
}

J'ai commis cette erreur sur un site de développement tout à l'heure. Heureusement, j'ai sauvegardé la base de données avant d'exécuter le script Helga (qui fonctionne parfaitement sans problème). Mais, comme je ne suis probablement pas le seul à utiliser des méta-scripts personnalisés/la gestion des sauvegardes personnalisées, j'ai pensé que c'était un rappel important.

1
Elliott Post