【问题标题】:Check if certain fee exists in woocommerce order items检查woocommerce订单项目中是否存在某些费用
【发布时间】:2019-10-13 08:51:35
【问题描述】:

我已为订单添加了额外费用,其中一项是可选(客户可以使用 AJAX 单选按钮在结帐页面上选择它)。

我的目标是在客户帐户中在添加了可选费用的那些订单的详细信息中回显自定义消息。

所以,基本上,假设我下订单有 3 笔费用(这些费用都存储在 wp_woocommerce_order_items 表中的 fee 中的 order_item_type 列中)。

这三项费用中的一项称为Optional Fee我的目标所需的一项)。

如何检查该Optional Fee 是否存在于订单商品中?

我从以下代码开始,但它只会让我获得最后存储的费用的名称,因此与Optional Fee 不匹配。

$order = wc_get_order( $order_id );

foreach ( $order->get_items('fee') as $item_id => $item ) {

    $fee_name = $item->get_name(); // This only gets me the name of the last fee stored in order items table.

    if ( $fee_name == 'Optional Fee' ) {

            echo 'Custom message';

        }
}

我想我应该以某种方式获取费用列表(它是一个数组吗?)并检查该列表中是否存在Optional Fee,但我不知道如何去做,也找不到可行的解决方案到目前为止。

【问题讨论】:

    标签: php mysql wordpress woocommerce orders


    【解决方案1】:

    经过 2 天的反复试验,我终于弄明白了。我不知道这是否是最好的解决方案,但它确实有效。

    基本上,如果在遍历订单的费用项目时找到Optional Fee,我需要做的是返回一个真实的声明。

    如果有人需要类似的东西,下面是代码:

    $order = wc_get_order( $order_id );
    
    $optional_fee_exists = false;
    
       $fee_counter = 0;
    
       foreach ( $order->get_fees() as $item_fee ) {
    
           $fee_counter++;
    
           $fee_name = $item_fee->get_name();
    
           if ( $fee_name == 'Optional Fee' ) {
    
               $optional_fee_exists = true;
    
           }
       }
    
    
    if ( $optional_fee_exists ) {
    
       //do stuff;
    
    }
    
    

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2018-05-20
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多