Wordpress 如何更新站点上所有产品的自定义元数据(从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() )

网站上有Dokan插件。现在,我需要将供应商名称添加到每个产品中,就像自定义元字段一样。我试着这样做:

$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(),这有助于重置自定义查询,不会影响主查询