Массовые обновления для публикации контента
Хорошо, итак, у меня есть пользовательский тип записи (назовем его "custompost"), содержащий около 3000 сообщений, и в каждом из них содержится около 150 расширенных пользовательских элементов данных полей. Я пытаюсь обновить post_content для всего этого с помощью плагина, который я сделал:
<?php
/**
* Plugin Name: Bulk Post Update
* Version: 1.0.0
**/
add_action('init','bulk_post_update');
function bulk_post_update(){
$my_posts = get_posts( array('post_type' => 'custompost', 'posts_per_page' => -1 ) );
foreach ( $my_posts as $my_post ):
$my_post->post_content = 'Text I want to update all my post content to';
wp_update_post( $my_post );
endforeach;
}
?>
Все работает нормально, если я просто использую небольшое значение, например 'posts_per_page' => 50, но если я попытаюсь использовать -1 для всех сообщений, то я думаю, что есть проблемы с памятью, так как мой сайт просто опустеет.
В любом случае, чтобы получить это работаешь? Либо путем увеличения объема памяти, либо каким-то другим способом?
Может быть, как-то запустить это в партиях по 50? Как бы я сделал это не утомительным способом?
Любая помощь/предложения приветствуются.
Заранее большое спасибо.
1 answers
<?php
/**
* Plugin Name: Bulk Post Update
* Version: 1.0.0
*
* @author Nabil Kadimi <[email protected]>
* $link http://wordpress.stackexchange.com/a/242499/17187
**/
add_action( 'init', function() {
global $wpdb;
$table = $wpdb->posts;
$post_type = 'custompost';
$new_post_content = 'Text I want to update all my post content to';
$affected = $wpdb->query(
$wpdb->prepare( "UPDATE {$table} SET post_content = %s, WHERE post_type = %s"
, $new_post_content
, $post_type
)
);
echo $affected . ' rows modified, please disable code.' . "\n";
echo 'File: ' . __FILE__ . "\n";
echo 'Line: ' . __LINE__ . "\n";
die();
} );
Редактировать
Основываясь на нашем обсуждении, я считаю, что переопределение контента на лету с помощью кода будет менее интенсивным на PHP и MySQL, вот как я бы это сделал:
<?php
/**
* Plugin Name: Override Post Content
* Version: 1.0.0
*
* @author Nabil Kadimi <[email protected]>
* $link http://wordpress.stackexchange.com/a/242499/17187
**/
add_filter( 'the_content', function( $content ) {
global $post;
$custom text = 'blah [blah]';
/**
* Ignore other post types.
*/
if ( 'custompost' !== $post->post_type ) {
return $content;
}
/**
* Return the value I want to override with.
*/
return do_shortcode( $custom_text );
} );