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.
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.
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.