Wordpress | Массовое перемещение контента из главного редактора в настраиваемое поле - PullRequest
0 голосов
/ 11 июня 2019

Я использовал плагин Advanced Custom Fields для создания нового настраиваемого поля в Wordpress. Теперь моя цель - переместить все ссылки для скачивания из " the_content " во вновь созданное настраиваемое поле " the_field ('download_link') ". Проблема в том, что у меня есть более 10000 сообщений для изменения. Мне было интересно, есть ли быстрый способ сделать это, вместо того, чтобы вручную перемещать ссылку для загрузки каждого сообщения?

Пожалуйста, посмотрите на изображения ниже, чтобы понять, чего я пытаюсь достичь.

До | * После 1014 *

Одним из препятствий является то, что весь контент сохраняется в таблице "wp_posts", где содержимое настраиваемого поля сохраняется в таблице "wp_postmeta".

Содержимое, сохраненное в настраиваемом поле «download_link», выглядит в таблице «wp_postmeta» следующим образом:

(8214, 2282, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8215, 2282, '_download_link', 'field_5cffd35335ce3'),
(8220, 2280, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8221, 2280, '_download_link', 'field_5cffd35335ce3'),
(8226, 2278, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8227, 2278, '_download_link', 'field_5cffd35335ce3'),

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

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 12 июня 2019

Это может быть сделано автоматически, если формат вашей ссылки для скачивания всегда одинаков.

  1. Резервное копирование вашей базы данных

  2. Создайте php-файл с именем my-cleanup.php. Переберите все продукты, возьмите ссылку из описания и переместите ее в post_meta.

  3. Запустите файл с помощью WP-CLI : wp eval-file my-cleanup.php

Пример кода

// Select the posts you want
$args = array(
    'post_type'      => 'post',
    'post_status'    => 'any',

    // -1 means all posts
    // For debug, set this to a small number
    'posts_per_page' => 3,
);

// Retrieve posts
$query = new WP_Query( $args );
$posts = $query->posts;

// Pattern to match
// [wpdm_package id='90228']
$pattern = "/(\[wpdm_package id='\d+'\])/";

// Process posts one by one
foreach ( $posts as $post ) {
    echo "Processing " . $post->post_title . "\n";
    $post_args['ID'] = $post->ID;

    // Get the shortcode from the post content
    preg_match( $pattern, $post->post_content, $matches );

    // Do we have a match?
    if ( count( $matches) > 0 ) {

        // Retrieve shortcode
        $shortcode = $matches[0];

        // Convert shortcode, maybe add some HTML
        $link = do_shortcode( $shortcode );

        // remove shortcode from description
        $post_args['post_content'] = preg_replace( $pattern, '', $post->post_content );

        // Update post
        wp_update_post( $post_args );

        // Create the post_metas
        add_post_meta( $post->ID, '_download_link', 'field_5cffd35335ce3', true );
        add_post_meta( $post->ID, 'download_link',  $link, true );
    }
}

Примечания

  1. Резервное копирование вашей базы данных

  2. Протестируйте несколько постов, чтобы получить уверенность в своем коде. Вы можете восстановить предыдущую ревизию в редакторе.

  3. Затем попробуйте 100, затем 1000. Часто вы найдете небольшие различия в способе ввода сообщений.

  4. Это может занять несколько часов для запуска 10.000 сообщений, поэтому вам нужна команда WP-CLI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...