web-dev-qa-db-fra.com

Déplacer la valeur d'une clé méta à une autre

Question migrante:

Comment structurer une requête MySQL pour déplacer la valeur d'une méta_key à une autre meta_key?

par exemple: j'ai une ancienne méta_key de "guest_sort" associée à "posts" sur "tf_exhibitor_sort" sous le type de message "exhibitor_listing"

J'ai déjà déplacé les articles de la catégorie d'articles d'origine vers ceux de type_type. Encore possible, ou suis-je hors de chance et devrai faire quelques saisies de données?

Merci.

1
Nadine

J'espère que j'ai bien compris la question. Lorsque vous déplacez une publication, les clés et les valeurs méta qui lui sont associées doivent rester avec la publication elle-même, comme toutes les méta de la publication (y compris les pièces jointes, l'image personnalisée, etc.). Il ne devrait donc y avoir aucun problème pour conserver les valeurs. Normalement, la seule chose qui DEVRAIT se produire est de changer la propriété 'post_type' de la publication.

mais quoi qu'il en soit, si votre question concerne les méta-clés RENAMING, vous devriez alors essayer:

update wp_postmeta 
set meta_key = 'new_key_name' 
where meta_key = 'old_key_name' 

Bien sûr, pour mettre à jour les valeurs, vous pouvez utiliser la même approche

UPDATE `wp_postmeta` SET `meta_value` = replace(meta_value, 'old_value', 'new_value') WHERE `meta_key` LIKE 'your_key'

EDIT 1: j'ai oublié de mentionner: ** SAUVEZ VOTRE BASE DE DONNEES AVANT TOUT ESSAI **

EDIT 2: commentaire suivant: Pour copier d’un champ à un autre (j’ai un peu confondu avec votre nom et la valeur que vous voulez où, alors je poste la phrase générique.

UPDATE `TABLE` SET `FIELD2` = `FIELD1'
5
krembo99

defo sauvegarder vos données !! ce n'est peut-être pas le plus efficace, mais vous pouvez aussi faire ceci avec des fonctions w/WP au lieu de requêtes SQL si vous êtes plus à l'aise pour parler WP (comme moi)

lance cette fois-ci:

/*
 * Converts Old Content 
 */
function kia_convert_content(){
$products = get_posts(array('numberposts'=>-1,'post_type'=>'exhibitor_listing'));

foreach( $products as $post ) : setup_postdata($post); 

    // get old meta
    $test = get_post_meta($post->ID,'guest_sort', true);

    // update new meta
    update_post_meta($post->ID,'tf_exhibitor_sort',$test);

    // delete old meta
        delete_post_meta($post->ID, 'guest_sort');

    endforeach;

}

vous pouvez simplement le supprimer après avoir rechargé votre thème une fois (et ajouter cette fonction à un hook d'initialisation ou quelque chose du genre). ou vous pourriez être super cool et utiliser ce code "run once" que j'ai trouvé sur Bainternet.

/*
* run Once class
* http://en.bainternet.info/2011/wordpress-run-once-only
*/
if (!class_exists('run_once')){
    class run_once{
        function run($key){
            $test_case = get_option('run_once');
            if (isset($test_case[$key]) && $test_case[$key]){
                return false;
            }else{
                $test_case[$key] = true;
                update_option('run_once',$test_case);
                return true;
            }
        }

        function clear($key){
            $test_case = get_option('run_once');
            if (isset($test_case[$key])){
                unset($test_case[$key]);
            }
        }
    }
}




/*
 * convert the content exactly 1 time
 */

$run_once = new run_once;
if ($run_once->run('kia_convert_content')){
    add_action('init','kia_convert_content');
}
1
helgatheviking