Reputation: 41
My current blog already has 130,000 pieces of data, and the content of each of my articles is a number.The content body of all articles is a number。
I want to batch transfer the content field value to a new field named 'views'.
I used the method of this tutorial
Never succeed with below message
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 20480 bytes) in /usr/local/lighthouse/softwares/wordpress-plugin/wp-includes/class-wp-term.php on line 198
After that I modified the memory size in the php.ini and wp-config.php files, but still not working.
blow is the code I used in function.php
add_action( 'get_header', 'so19967768_update_posts' );
function so19967768_update_posts()
{
if( ! isset( $_GET['update'] ) )
return;
$posts = get_posts( array( 'post_type' => 'post', 'posts_per_page' => -1 ) );
foreach( $posts as $post )
{
setup_postdata( $post );
$value = $post->post_content;
update_post_meta( $post->ID, 'views', $value );
wp_update_post( array(
'ID' => $post->ID,
'post_content' => ''
) );
}
echo 'update complete!';
die();
}
Upvotes: 0
Views: 207
Reputation: 119
You must do that by MySQL query like this in wp function:
add_action( 'get_header', 'so19967768_update_posts' );
function so19967768_update_posts()
{
if( ! isset( $_GET['update'] ) )
return;
global $wpdb;
$wpdb->query( "INSERT INTO `wp_postmeta`(`post_id`, `meta_key`, `meta_value`) SELECT ID,'views',post_content FROM `wp_posts`;");
$wpdb->query( "UPDATE `wp_posts` SET `post_content`='';");
die();
}
Also, You can run this directly on wp_postmeta table in database:
INSERT INTO `wp_postmeta`(`post_id`, `meta_key`, `meta_value`) SELECT ID,'views',post_content FROM `wp_posts`;
UPDATE `wp_posts` SET `post_content`='';
*Trick: If wp function doesn't work by load website, comment this line:
if( ! isset( $_GET['update'] ) )
return;
Upvotes: 1