draw62188 2019-08-08 21:26
浏览 49
已采纳

通过functions.php设置woocommerce客户备注不起作用

In Woocommerce I'm trying to modify the Customer Order note to say "Ship with this provider" when a customer billing/shipping address is a specific city.

WordPress 5.2.2 WooCommerce 3.6.5

I'm using the woocommerce_thankyou hook, getting the order data via order ID and get_customer_note(), set_customer_note().

add_action('woocommerce_thankyou','route_mail_on_customer_location', 30, 1);

function route_mail_on_customer_location($order_id){
  $CP_cities = ["City 1", "City 2", "City 3"];

  $order = wc_get_order( $order_id );
  $curr_note = $order->get_customer_note();
  echo "<p>Customer note: " . $curr_note . "</p>";
  if((strpos($curr_note, "Ship with Canada Post.") == false) && (in_array($order->get_shipping_city(), $CP_cities, true))){
    $note = __($curr_note . ". Ship with Canada Post.");
    $order->set_customer_note($note);
  }
  echo "<p>Customer note: " . $order->get_customer_note() . "</p>";
}

The echo results display correctly.

Customer note: Test Note

Customer note: Test Note Ship with Canada Post.

When I check the order page the order note is only the original customer note.

Customer provided note:
Test Note

It looks like the setter isn't sending the changes to the database. Is there a method I need to call to make sure that my changes are added to the DB, or should I just do it directly via a wpdb query?

EDIT: Corrected echo results to reflect code.

  • 写回答

2条回答 默认 最新

  • donglin4636 2019-08-09 10:26
    关注

    Just add the follows code snippet to achieve to task -

    function modify_woocommerce_checkout_posted_data( $posted_data ){
    
        $CP_cities = array( 'city1', 'city2', 'city3' ); // make sure to replace with proper city data
    
        $curr_note = $posted_data['order_comments'];
        if( strpos($curr_note, 'Ship with Canada Post.') == false  && in_array( $posted_data['shipping_city'], $CP_cities ) ){
            $note = $curr_note . __(' Ship with Canada Post.', 'textdomain' );
            $posted_data['order_comments'] = $note;
        }
        return $posted_data;
    }
    add_filter( 'woocommerce_checkout_posted_data', 'modify_woocommerce_checkout_posted_data', 99 );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘