使用Woocommerce中的钩子更新产品价格

时间:2017-11-14 04:27:20

标签: php wordpress woocommerce product price

我想在wp-admin中更新产品时,使用带有整数或字符串的元键_regular_price来更新产品常规价格。

我想要的用户流程是:

  1. 打开产品编辑页面
  2. 点击更新按钮
  3. 看到页面重新加载后_regular_price设置为20。
  4. add_action( 'woocommerce_process_product_meta', 'update_test' );
    function update_test( $post_id ) {
        update_post_meta( $post_id, '_regular_price', 20 );
    }
    

    请帮助我找到我在上述功能中做错的事情,让我知道其他任何方法。

2 个答案:

答案 0 :(得分:0)

要处理woocommerce_process_product_meta,我猜你错过了这些参数。我希望以下代码可能符合您的需求。

add_action( 'woocommerce_process_product_meta',  $wc_meta_box_product_data_save,  $int,  $int ); 

参数(3)

  • $ wc_meta_box_product_data_save(string)=> ' WC_Meta_Box_Product_Data ::保存' wc元框产品数据保存。
  • $ int(int)=> 10 The int。
  • $ int(int)=> 2 int。

您可以找到详细信息in this link

答案 1 :(得分:0)

已更新 (2018年8月)

您的代码是正确的,但钩子是Metaboxes自定义字段的佣人。

您应该使用save_post_{$post->post_type} Wordpress钩子仅定位产品信息类型

此外,您可能需要使用函数wc_delete_product_transients()更新有效价格和以刷新产品瞬态缓存

所以你的代码将是:

add_action( 'save_post', 'update_the_product_price', 10, 3 );
function update_the_product_price( $post_id, $post, $update ) {

    if ( $post->post_type != 'product') return; // Only products

    // If this is an autosave, our form has not been submitted, so we don't want to do anything.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    // Check the user's permissions.
    if ( ! current_user_can( 'edit_product', $post_id ) )
        return $post_id;

    $price = 50; // <===  <===  <===  <===  <===  <=== Set your price

    $product = wc_get_product( $post_id ); // The WC_Product object

    // if product is not on sale
    if( ! $product->is_on_sale() ){
        update_post_meta( $post_id, '_price', $price ); // Update active price
    }
    update_post_meta( $post_id, '_regular_price', $price ); // Update regular price
    wc_delete_product_transients( $post_id ); // Update product cache
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

经过测试和工作......