如何删除重复的自定义字段?

时间:2011-04-20 作者:Sai

我已经将我的博客从blogspot迁移到WordPress。然后我注意到许多帖子包含重复的自定义字段。像blogger\\u author、blogger\\u permalink、blogger\\u blog一样,最多可复制5次。如何删除重复的自定义字段?

2 个回复
最合适的回答,由SO网友:windyjonas 整理而成

可以使用以下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\\u键的名称。

或者您可以使用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]);
            }
        }
    }
?>

SO网友:TheJester12

应该注意的是,这会删除所有重复的keys, 不重复content. 因此,如果您有多个键为“blogger\\u author”的自定义字段different, 其中只有一个将被保存。只是让你知道。

结束

相关推荐

不允许此MySQL查询中的类别

我正在尝试修改一个插件,该插件生成一个归档列表,以便它只显示一个类别,使其成为一个单一类别的归档。旧版本的插件使用了get\\u posts查询,因此很容易禁止帖子类别:$rawposts = get_posts( \'numberposts=-1&category=-4,-6,-7,-9\' ); 新版本的插件使用该数据库查询:SELECT ID, post_date, post_date_gmt, comment_status, comment_count FROM $wp