Вордпресс | Массовое перемещение контента из основного редактора в настраиваемое поле

Я использовал плагин Расширенные настраиваемые поля для создания нового настраиваемого поля в Wordpress. Теперь моя цель — переместить все ссылки для скачивания из «содержимое» во вновь созданное пользовательское поле «the_field('скачать_ссылка')». Проблема в том, что мне нужно изменить более 10 000 сообщений. Мне было интересно, есть ли быстрый способ сделать это, вместо того, чтобы вручную перемещать ссылку для скачивания для каждого сообщения?

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

До | После

Одним из препятствий является то, что весь контент сохраняется в таблице «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'),

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

  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.

Привет Кристиан, спасибо за ваш ответ. Все ссылки для скачивания имеют тот же формат, что и в виде шорткода, так как я использую WP Download Manager. Например: [wpdm_package id='90228']. Ссылки для скачивания в моем начальном сообщении взяты с другого моего веб-сайта, который я вручную переместил в пользовательское поле. Теперь большая проблема - переместить 9500+ ссылок для скачивания (шорткод) в пользовательское поле! Если вы не против показать мне, что делать во второй части, пожалуйста, я был бы очень признателен за ваше время и помощь. Спасибо.

Mike Smith 12.06.2019 00:42

Привет Кристиан! Ваш код работает! После нескольких проб и ошибок, разобравшись с WP-CLI (Новый пользователь!) Я опробовал несколько сообщений, и все работает отлично! Я немного изменил кодировку, так как хотел просто переместить шорткод, а не преобразовывать его в ссылку, но, несмотря на это, я очень благодарен за ваше время и помощь! Это действительно много значит и сэкономит мне много времени! Спасибо еще раз!

Mike Smith 12.06.2019 21:11

Другие вопросы по теме