web-dev-qa-db-fra.com

Comment supprimer les champs personnalisés en double?

J'ai migré mon blog de blogspot vers WordPress. Ensuite, j'ai remarqué que de nombreux articles contiennent des champs personnalisés en double. Comme blogger_author, blogger_permalink, blogger_blog sont dupliqués jusqu'à 5 fois. Comment puis-je supprimer les champs personnalisés en double?

1
Sai

Vous pouvez supprimer directement de la base de données à l'aide d'une instruction SQL telle que:

delete from wp_postmeta
where meta_id in (
       select *
       from (
               select meta_id
               from wp_postmeta a
               where a.meta_key = 'blogger_blog'
               and meta_id not in (
                       select min(meta_id)
                       from wp_postmeta b
                       where b.post_id = a.post_id
                       and b.meta_key = 'blogger_blog'
               )
       ) as x
);

N'oubliez pas de changer le nom de la méta_key aux deux endroits si vous souhaitez supprimer les doublons pour un autre champ personnalisé.

ou vous pouvez utiliser un script php pour cela. Exemple:

 <?php
define('WP_USE_THEMES', false);
require('wp-blog-header.php');

    define( 'WP_DEBUG_DISPLAY', true ); 
    ini_set( 'display_errors', true );
    $allposts = get_posts('numberposts=-1&post_type=post&post_status=any');
    $keys = array('blogger_blog', 'blogger_author', 'blogger_permalink');
    foreach ( $keys as $key ) {
        foreach( $allposts as $postinfo) {
            // Fetch array of custom field values
            $postmeta = get_post_meta($postinfo->ID, $key);

            if (!empty($postmeta) ) {
                // Delete the custom field for this post (all occurrences)
                delete_post_meta($postinfo->ID, $key);

                // Insert one and only one custom field
                update_post_meta($postinfo->ID, $key, $postmeta[0]);
            }
        }
    }
?>
6
windyjonas

Il convient de noter que cette opération supprime toutes les clés en double et non en double content . Donc, si vous avez plusieurs champs personnalisés avec la clé "blogger_author" qui sont chacun différents , un seul d'entre eux sera enregistré. Juste pour que vous sachiez.

0
TheJester12