【问题标题】:WooCommerce - Check if the products in a specific order are FeaturedWooCommerce - 检查特定订单中的产品是否有特色
【发布时间】:2018-09-25 12:54:49
【问题描述】:

我正在尝试针对包含“特色”产品的特定“处理中”订单列表显示特定字符​​串。

更准确地说,我想在累积满足两个条件时回显一条消息:

1) 订单状态为“处理中”;和

2) 相应订单中的所有产品都标记为“精选”。

换句话说,一旦我手动将所有订购的产品标记为“精选”,我的用户帐户页面上就会显示一条特定的消息。

到目前为止我的代码(但没有给我想要的结果):

    <?php 

  foreach ( $order_summary as $order ) :

                            $order      = wc_get_order( $order->order_id );
                            $order_id       = $order->get_id();
                            $order_items    = get_products_for_order( $order_id );

                        if ( $order->get_status() == 'processing' ) {
                            if ( $order_items->is_featured() ) {
                                echo 'Something';
                            } else {
                                echo 'Something else';
                            }
                        }

    ?>

我不确定如何正确检查相应订单中是否有(或没有)“精选”产品。

有什么想法吗?

【问题讨论】:

  • get_products_for_order() 函数返回什么?如果是一系列产品,则需要在这些产品上运行 foreach 循环,然后再检查 is_featured()
  • @johnnyd23,我实际上正在对市场插件进行一些更改。 get_products_for_order() 函数如下:public static function get_products_for_order( $order_id ) {global $wpdb;$vendor_products = array(); $results = $wpdb-&gt;get_results( " SELECT product_id FROM {$wpdb-&gt;prefix}pv_commission WHERE order_id = {$order_id} AND status != 'reversed' AND vendor_id = " . get_current_user_id() . " GROUP BY product_id" ); foreach ( $results as $value ) {$ids[ ] = $value-&gt;product_id;} return $ids;}你能帮帮我吗?我无法掌握它。还有,@loictheaztec?

标签: php woocommerce product orders


【解决方案1】:

get_products_for_order() 函数返回一个产品数组。您将需要在该数组上运行一个 foreach 循环并检查每个产品是否单独提供。

<?php 

    foreach ( $order_summary as $order ) {

        $order = wc_get_order( $order->order_id );
        $order_id = $order->get_id();
        $order_items = get_products_for_order( $order_id );

        if ( $order->get_status() == 'processing' ) {

            foreach( $order_items as $item ) {

                if ( $item->is_featured() ) {

                    echo 'Something';

                } else {

                    echo 'Something else';

                }
            }
        }
    }

?>

评论后编辑:

<?php 

    foreach ( $order_summary as $order ) {

        $order = wc_get_order( $order->order_id );
        $order_id = $order->get_id();
        $order_items = get_products_for_order( $order_id );

        if ( $order->get_status() == 'processing' ) {

            $featured = true;
            foreach( $order_items as $item ) {

                if ( !$item->is_featured() ) {
                    $featured = false;
                    break;
                }                     
            }

            if( $featured ) {
                echo 'Something';
            } else {
                echo 'Something else';
            }
        }
    }

?>

【讨论】:

  • 我想我已经尝试过了,但它不能正常工作,也没有给我我想要的东西。我会尽量明确我的目标:我只想在累积满足两个条件时回应一些东西:1)订单状态是“处理中”; 2) 该订单中的所有产品均标记为“精选”。换句话说,一旦所有订购的产品都被我手动标记为“精选”,我的用户帐户页面上应该会回显一条特定的消息。
  • 您更新后的答案效果不佳,从某种意义上说,无论我是否将产品标记为精选产品,它总是呼应“某事”而不是“其他事”。
  • @LoicTheAztec,你能帮忙吗?
  • 没有类似的函数:get_products_for_order()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2017-06-18
  • 1970-01-01
相关资源
最近更新 更多