mikewills
  • 0
Новичок

Дублирование (или более) настраиваемых полей во многих сообщениях. Есть ли простой способ очистить их?

  • 0

Я нахожусь в процессе очистки сайта после его переноса с одной установки WP на установку WP с несколькими сайтами. Я заметил много-много повторяющихся настраиваемых полей для каждого сообщения. Я предполагаю, что это из старых версий плагинов, которые не проверяли поле перед добавлением другого. При миграции я удаляю эти плагины.

Могу ли я просто удалить эти поля в бэкэнде с помощью SQL или есть лучший способ?

SELECT * 
FROM  `wp_5_postmeta` 
WHERE  `meta_key` IN ("podPressPostSpecific", "aktt_tweeted", "podPressMedia")

Только используя DELETE очевидно.

Share
  1. На этом сайте более 700 записей на 80 или около того постов.

    • 0
  2. Если вы не собираетесь использовать эти плагины, сделайте это. Нет причин держать их рядом. Прямой запрос SQL должен быть в порядке.

    Связанный: add_post_meta() есть отличный аргумент, чтобы предотвратить эту проблему. Четвертый аргумент — логическое значение, указывающее, должна ли мета быть единственной:

    add_post_meta( $post->ID, 'my_foo_bar', 'value', true );
    

    Источник: Добавить метаданные | Кодекс ВП

    • 0
  3. Если вы хотите удалить все поля, сделайте это прямо в базе данных или в админке. Но если вы хотите сохранить одну копию каждого поля и удалить только дубликаты, то это немного сложнее. Вы можете удалить прямо из базы данных, используя сложную инструкцию SQL, например:

    delete from wp_postmeta
    where meta_id in (
           select *
           from (
                   select meta_id
                   from wp_postmeta a
                   where a.meta_key = 'podPressPostSpecific'
                   and meta_id not in (
                           select min(meta_id)
                           from wp_postmeta b
                           where b.post_id = a.post_id
                           and b.meta_key = 'podPressPostSpecific'
                   )
           ) 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('podPressPostSpecific', 'aktt_tweeted', 'podPressMedia');
        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]);
                }
            }
        }
    ?>
    
    • 0

Оставить ответ

You must login to add an answer.