Intereting Posts
Разрешить переменное количество комментариев перед разбиением на страницы Плагин дает мне «У вас недостаточно прав для доступа к этой странице». Почему переменная GET на одной странице сайта вызывает ошибку 404, когда переменная GET работает на другой странице сайта? Параметры выбора категории для параметров плагина Можно ли искать строку в сообщениях или послемета? Пользовательские теги-теги не работают для базового цикла? Глобальная переменная $ post возвращает неверный объект Переместите ссылку «Меню» из «Внешний вид»> «Меню» на свою вкладку в левой колонке «Панель управления» Как изменить тему demo get_theme_mod не возвращает результат Как удалить фильтр, анонимный объект? Как удалить параметр «Статическая передняя страница» в Настройке Как отобразить 2 равных столбца li на основе количества элементов в wp_nav_menu, разделенных на 2? Сайт только для пользователей, прошедших аутентификацию с помощью другого приложения PHP Где найти исходный код виджета?

Массовое перемещение (или копирование) из настраиваемого поля в сообщение?

Мне нужно переместить (или скопировать) содержимое настраиваемого поля в основной корпус сообщения, заменив любой существующий контент.

Мне нужно сделать это за несколько сотен сообщений … Есть ли быстрый способ сделать это?

Я могу управлять перемещением значений из одного мета поля в другое в SQL, но я не уверен, как это сделать с сообщением содержания …

Если бы кто-нибудь мог дать мне несколько указателей, которые были бы очень оценены.

Для SQL содержимое сообщения сохраняется в таблице «wp_posts» в столбце «post_content». Когда вы делаете это с phpmyadmin, вам нужно будет позаботиться о том, чтобы вы обновляли только основную запись, а не одну из ее ревизий

Если вы ищете решение на основе WordPress, способ wp_update_post для этого – использовать wp_update_post

 // Update post 37 $my_post = array(); $my_post['ID'] = 37; $my_post['post_content'] = get_post_meta($my_post['ID'], 'meta_key', true); // Update the post into the database wp_update_post( $my_post ); 

Предполагая, что вы хотите сделать это для всех сообщений, у которых custom_field не пусто, добавьте это в свои функции. custom_field :

 add_shortcode('update-posts-from-custom-fields', 'upfc_fields321'); function upfc_fields321() { $args = array( 'meta_key' => 'custom_field', 'meta_query' => array( array( 'key' => 'custom_field', 'value' => '', 'compare' => '!=', ), ), 'post_count' => '-1' ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { $post_counter = $save_counter = $delete_counter = 0; while ( $the_query->have_posts() ) { $the_query->the_post(); global $post; // not sure if this is needed, but it can't hurt echo ' <div style="position: relative;"> <h3 style="display: block;">' . the_title() . ' </h3> <div style="width: 48%; display: inline-block; float: none;">' . the_content() . '</div>'; $post_counter++; $post->post_content = get_post_meta($post->ID, 'custom_field', true); $post->post_content_filtered = ''; $post->post_excerpt = ''; // uncomment next line when you are ready to commit changes // wp_update_post($post); $save_counter++; // uncomment next line if you want to delete the meta key (useful if you have too many posts and want to do them in batchces) // delete_post_meta($post->id, 'custom_field'); $delete_counter++; echo ' <div style="width: 48%; display: inline-block; float: none">' . the_content() . '</div> </div>'; } } else { // no posts found }; echo '<hr>Processed posts: ' . $post_counter . '<hr>Saved posts:' . $save_counter . '<hr>Deleted meta from: ' . $delete_counter . ' posts'; wp_reset_postdata() ; } 

Код получает все сообщения, которые имеют custom_field и заменяет содержимое содержимым этого поля. Как и сейчас, он не сохраняет изменения, просто отображает старое и новое содержимое бок о бок, поэтому вы можете проверить, все ли правильно (вы должны делать резервную копию вашего db в любом случае до этого, кстати).

Когда вы будете готовы увидеть некоторые изменения, раскомментируйте wp_update_post(...) .

Если у вас слишком много сообщений, измените лимит на что-то вроде 40 – 80 сообщений, а также раскомментируйте delete_post_meta(...) , чтобы пользовательские поля удалялись после копирования, и они не отображаются в следующем запуске функция.

Теперь все, что вам нужно сделать, это разместить [update-posts-from-custom-fields] в любой записи или на странице и обновить. Я сам поместил бы его в пустую страницу (я обычно держу тестовую страницу на своих сайтах, доступную только для администратора, где я тестирую материал и запускаю такие функции, как этот).

Это может занять некоторое время, так как оно отобразит все найденные сообщения.