为了账号安全,请及时绑定邮箱和手机立即绑定

Woocommerce:每天将所有产品保存 X 次

Woocommerce:每天将所有产品保存 X 次

PHP
慕姐4208626 2021-07-06 09:58:05
我有更新所有产品的代码。它工作正常。但我需要改变它。    add_action( 'wp', 'update_products_by_x' );function update_products_by_x(){    $limit = 200;    // getting all products    $products_ids = get_posts( array(        'post_type'        => 'product', // or ['product','product_variation'],        'numberposts'      => $limit,        'post_status'      => 'publish',        'fields'           => 'ids',        'meta_query'       => array( array(            'key'     => '_sync_updated',            'compare' => 'NOT EXISTS',        ) )    ) );    // Loop through product Ids    foreach ( $products_ids as $product_id ) {        // Get the WC_Product object        $product = wc_get_product($product_id);        // Mark product as updated        $product->update_meta_data( '_sync_updated', true );        $product->save();    }}上面的函数将更新的产品标记为“更新”。然后此代码将保存所有产品一次。问题:如何更改此功能,以便每次执行该功能时都保存所有产品,而不仅仅是一次。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

更新:该功能将每天运行 5 次(最多)。


如果您有很多产品,则无法更新所有产品。


每次浏览您的网站时都会运行以下内容,并且每次都会更新定义数量的产品以避免出现问题(它将永远运行,您将删除它):


add_action( 'wp', 'update_products_by_x' );

function update_products_by_x(){

    // Get next start time

    $start_time = (float) get_option('product_update_start_time');


    if ( $start_time <= time() ) {

        if ( empty($start_time) || $start_time == 0 ) {

            $start_time = time();

        }


        ## ----- SETTINGS (Below) ----- ##

        $next_time = $start_time + ( 4.8 * 60 * 60 ); // 5 times à day

        $limit     = 200; // Fix the number of products to update each time


        $offset    = (int) get_option('product_update_offset');


        // Get products

        $products_ids = get_posts( array(

            'post_type'        => 'product', // or ['product','product_variation'],

            'numberposts'      => $limit,

            'offset'           => $offset,

            'post_status'      => 'publish',

            'fields'           => 'ids',

        ) );


        $count = count($products_ids);


        if( $count > 0 ) {

            // Loop through product Ids

            foreach ( $products_ids as $product_id ) {

                // Get the WC_Product object

                $product = wc_get_product($product_id);

                $product->save();

            }

            update_option('product_update_offset', ( $count == $limit ? ( $count + $offset ) : 0 ) );

        }

        update_option('product_update_start_time', $next_time);

    }

}

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。


查看完整回答
反对 回复 2021-07-16
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信