0 レビュー
1 回答
php-130,000件の投稿コンテンツ値をWordPressのカスタムフィールドに一括移動
現在のブログにはすでに13万件のデータがあり、各記事のコンテンツは数字です。すべての記事のコンテンツ本文は数字です。
コンテンツフィールドの値を「views」という名前の新しいフィールドにバッチ転送したい。
以下のメッセージで成功しない 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
その後、php.iniファイルとwp-config.phpファイルのメモリサイズを変更しましたが、まだ機能していません。
blowは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();
}
わからない
0
レビュー
答え :
解決策:
wp関数で次のようにMySQLクエリを実行する必要があります:
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();
}
また、これはデータベースのwp_postmetaテーブルで直接実行できます:
INSERT INTO `wp_postmeta`(`post_id`, `meta_key`, `meta_value`) SELECT ID,'views',post_content FROM `wp_posts`;
UPDATE `wp_posts` SET `post_content`='';
*トリック: ウェブサイトの読み込みでwp関数が機能しない場合は、次の行にコメントしてください:
if( ! isset( $_GET['update'] ) )
return;
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。