Как удалить повторяющиеся пользовательские поля?
Я перенес свой блог с WordPress на WordPress. Затем я заметил, что многие сообщения содержат повторяющиеся пользовательские поля. Например, blogger_author, blogger_permalink, blogger_blog дублируются до 5 раз. Как я могу удалить дубликаты пользовательских полей?
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]);
}
}
}
?>
Следует отметить, что при этом удаляются все дубликаты ключей , а не дубликаты содержимого . Поэтому, если у вас есть несколько настраиваемых полей с ключом "blogger_author", каждое из которых отличается , будет сохранено только одно из них. Просто чтобы вы были в курсе.