Wordpress 如何更新站点上所有产品的自定义元数据(从Dokan添加供应商名称)?
网站上有Dokan插件。现在,我需要将供应商名称添加到每个产品中,就像自定义元字段一样。我试着这样做:Wordpress 如何更新站点上所有产品的自定义元数据(从Dokan添加供应商名称)?,wordpress,woocommerce,Wordpress,Woocommerce,网站上有Dokan插件。现在,我需要将供应商名称添加到每个产品中,就像自定义元字段一样。我试着这样做: $args = array( 'post_type' => 'product', 'posts_per_page' => -1 ); $products = new WP_Query( $args ); if ( $products->have_posts() ): while ( $products->have_posts() )
$args = array(
'post_type' => 'product',
'posts_per_page' => -1
);
$products = new WP_Query( $args );
if ( $products->have_posts() ):
while ( $products->have_posts() ):
$vendor_id = get_post_field( 'post_author', get_the_id() );
$vendor = new WP_User($vendor_id);
$store_info = dokan_get_store_info( $vendor_id );
$store_name = $store_info['store_name'];
$productID = $product->get_id();
update_post_meta( $productID, 'vendor_name', $store_name );
$products->the_post();
endwhile;
endif;
因此,我想更新所有产品的元数据。但是,当我将这段代码添加到functions.php时,站点只是停止加载,或者更确切地说是加载,但加载速度非常慢。没有错误。虽然我可能错了。也许问题不在于代码,而在于网站上有18000多种产品?或者也许有另一种方法来实现我需要的目标。请帮我弄清楚。您可以尝试在wordpress操作上运行此代码,并检查一些查询参数,使其不会在正常视图上加载。这是一个一次性过程,意味着您可以自己运行此脚本
add_action( 'wp', function(){
if( isset( $_REQUEST['add_vendor_meta'] ) && $_REQUEST['add_vendor_meta'] == 'true' ){
$args = array(
'post_type' => 'product',
'posts_per_page' => -1
);
$products = new WP_Query( $args );
if ( $products->have_posts() ):
while ( $products->have_posts() ):
$products->the_post();
$vendor_id = get_post_field( 'post_author', get_the_id() );
$vendor = new WP_User($vendor_id);
$store_info = dokan_get_store_info( $vendor_id );
$store_name = $store_info['store_name'];
$productID = $product->get_id();
update_post_meta( $productID, 'vendor_name', $store_name );
endwhile;
wp_reset_postdata();
endif;
}
} );
此外,还要确保在while循环结束后添加wp_reset_postdata()。这有助于重置自定义查询,不会影响主查询。您可以尝试在wordpress操作上运行此代码,并检查一些查询参数,使其不会在普通视图上加载。这是一个一次性过程,意味着您可以自己运行此脚本
add_action( 'wp', function(){
if( isset( $_REQUEST['add_vendor_meta'] ) && $_REQUEST['add_vendor_meta'] == 'true' ){
$args = array(
'post_type' => 'product',
'posts_per_page' => -1
);
$products = new WP_Query( $args );
if ( $products->have_posts() ):
while ( $products->have_posts() ):
$products->the_post();
$vendor_id = get_post_field( 'post_author', get_the_id() );
$vendor = new WP_User($vendor_id);
$store_info = dokan_get_store_info( $vendor_id );
$store_name = $store_info['store_name'];
$productID = $product->get_id();
update_post_meta( $productID, 'vendor_name', $store_name );
endwhile;
wp_reset_postdata();
endif;
}
} );
还要确保在while循环结束后添加wp_reset_postdata(),这有助于重置自定义查询,不会影响主查询