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.
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'
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');
}