Как удалить повторяющиеся пользовательские поля?


Я перенес свой блог с WordPress на WordPress. Затем я заметил, что многие сообщения содержат повторяющиеся пользовательские поля. Например, blogger_author, blogger_permalink, blogger_blog дублируются до 5 раз. Как я могу удалить дубликаты пользовательских полей?

Author: Chris_O, 2011-04-20

2 answers

Вы можете удалить непосредственно из базы данных, используя инструкцию SQL, например:

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

Не забудьте изменить имя meta_key в обоих местах, если вы хотите удалить дубликаты для другого настраиваемого поля.

Или вы можете использовать для этого php-скрипт. Пример:

 <?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
Author: windyjonas, 2011-04-28 07:20:13

Следует отметить, что при этом удаляются все дубликаты ключей , а не дубликаты содержимого . Поэтому, если у вас есть несколько настраиваемых полей с ключом "blogger_author", каждое из которых отличается , будет сохранено только одно из них. Просто чтобы вы были в курсе.

 0
Author: TheJester12, 2013-02-27 21:02:55