当前位置: 首页 > 知识库问答 >
问题:

如何在Woocommerce中以编程方式安排销售日期

柳俊逸
2023-03-14

我试图在woocommerce中安排保存(发布)帖子时的销售期。

我试过下面两种方法,但都不起作用。代码在正确的时间被调用,只是没有更新post meta。

这两种方法都没有更新销售计划。

add_action('save_post_product', array($this, 'knpv_new_product_from_draft'), 10, 2);
add_action('edit_post_product', array($this, 'knpv_new_product_from_draft'), 10, 2);
public function knpv_new_product_from_draft($post_id, $post){   


    //Get todays date and the date 15 days from now
    $datefrom = strtotime(date('Y-m-d'));
    $dateto = strtotime(date('Y-m-d', strtotime('+15 days',$datefrom)));

    //Method 1
    $product = wc_get_product($post_id);

    if( !empty(get_post_meta($post_id, '_sale_price', true)) ){         
        $product->set_date_on_sale_from( $datefrom );
        $product->set_date_on_sale_to( $dateto );
    }

    $product->save();       

    //Method 2    
    $var = update_post_meta($post_id, '_sale_price_dates_from', $datefrom);
    $var2 = update_post_meta($post_id, '_sale_price_dates_to',   $dateto);

}   

共有2个答案

班高明
2023-03-14

这不起作用的原因是因为元是在save_post操作完成后更新的。所以我更新了元,然后表单中的空值也更新了它们并清除了它们。

所以我就这样做了。

add_action('save_post_product', array($this, 'knpv_new_product_from_draft'), 10, 2);
add_action('edit_post_product', array($this, 'knpv_new_product_from_draft'), 10, 2);
public function knpv_new_product_from_draft($post_id, $post){  
  //If the post is being published. 
  if (get_post_status($post_id) == 'publish') {

    //Set the values from the posted form data.
    $_POST['_sale_price_dates_from'] = date('Y-m-d');
    $_POST['_sale_price_dates_to'] = date('Y-m-d', strtotime($datefrom.' +15 days'));

  }
} 
乜承嗣
2023-03-14

您可以使用以下方法之一:

第1条道路-自第3条起:

add_action( 'woocommerce_admin_process_product_object', array($this, 'save_wc_product_meta_data') );
public function save_wc_product_meta_data($product) {   

    if( isset( $_POST['_sale_price'] ) && $_POST['_sale_price'] >= 0 ){
        $product->set_date_on_sale_from( strtotime(date('Y-m-d')));
        $product->set_date_on_sale_to( strtotime( date('Y-m-d', strtotime('+15 days'))));
    }
} 

第二条路-旧路:

add_action( 'woocommerce_process_product_meta', array($this, 'save_wc_product_meta_data') );
public function save_wc_product_meta_data($product_id) {   

    if( get_post_meta($product_id, '_sale_price', true) >= 0 ){
        update_post_meta($product_id, '_sale_price_dates_from', strtotime(date('Y-m-d')));
        update_post_meta($product_id, '_sale_price_dates_to', strtotime( date('Y-m-d', strtotime('+15 days'))));
    }
} 

代码functions.php活动子主题(或活动主题)的文件中。两种方式都有效。

补充:

若要仅在post状态设置为“发布”时才执行此操作,您可以在现有条件下向IF语句添加以下内容:

&& isset($_POST['post_status']) && $_POST['post_status'] === 'publish'
 类似资料:
  • 我有一个Woocommerce商店,里面有各种各样的产品。 我要给所有产品打八折,属于产品类别Cuckoo 现在我所要做的就是在我的functions.php中设定一个销售价格 它的做法如下: 如果我在计算后var_dump$sale_price的结果,我会得到正确的答案,但是前端的价格显示会击出正常价格,并将销售价格显示为正常价格。 是否有一个钩子/过滤器可以用来实现这一点? 我还尝试通过以下方

  • 我正在使用在woocommerce中以编程方式添加产品。除了产品属性外,其他所有功能都正常工作。除非我从管理员处单击“更新”,否则产品页面视图中不会显示产品属性。 我正在添加成吨的产品,所以有没有办法在产品页面的下拉列表中显示变化。 这是我的代码,它工作正常,所有内容都放在正确的字段中,如果不单击“更新”,它就不会在产品页面上显示选项。

  • 在WooCommerce,我试图找到一种方法,如果购物车的重量超过100磅,可以给整个客户的订单打10%的折扣。我正在实现这一目标。对于下一步,我正在寻找一种方法,通过操作/钩子通过functions.php.以编程方式应用优惠券代码 看来我可以使用woocommerce\u ajax\u apply\u优惠券功能来实现这一点(http://docs.woothemes.com/wc-apidoc

  • 问题内容: 我最困难的时间是在WooCommerce中以编程方式创建订单。我正在使用下面的代码,是否正在创建订单,但是我无法获得客户信息或添加到订单的产品线项目。创建的新订单只是访客,没有任何物品,用户信息等。 问题似乎是,一旦创建了订单对象,尝试向订单中添加数据时就会失败。 这是我在日志中遇到的错误: 任何帮助,将不胜感激! 问题答案: 问题出在您的动作挂钩上。使用以下钩子: 确保给定的产品ID

  • 我目前有一个表单,管理员可以在一个屏幕内批量更新产品的销售价格。 提交表格时,我只需使用这样的update_post_meta: 这将更新_sale_price元键。当我进入管理检查这一点,新的销售价格已经插入。当我在前端查看产品时,该产品未标记为正在销售。我必须回去重新保存产品。 我的问题是,伍兹商业是否添加了一些其他meta_key来标记产品在售?我在数据库中为所有插入的自定义字段进行了一次挖

  • 我试图以编程方式批量添加WooCommerce中的产品,但出于某种原因,它只是添加了第一个产品。我正在向一个应用程序发出请求,该应用程序返回带有产品名称和描述的JSON响应。到目前为止,我的代码看起来像下面的代码: