【问题标题】:How to loop through order item quantity in WooCommerce如何在 WooCommerce 中遍历订单商品数量
【发布时间】:2021-02-07 20:36:23
【问题描述】:

以下问题:我想为任意数量的订单输出一个 PDF 按钮。对于此 PDF 按钮,应为每个订单提供订单 ID 和商品 ID,以便生成 PDF。

在下面的代码部分中,我还可以从前端的图片中看到我的意思:

foreach ( $order->get_items() as $item_id => $item ) {
$order = new WC_Order( $_POST['oid'] );
$cid = get_user_meta( get_current_user_id(), 'company', true );
$result = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . "center_codes WHERE order_id = '" . $order_id . "'", OBJECT );
        foreach ($result as $key => $value) {
            echo '<button><a style="color: #fff;" href="' . PLUGIN_URL . '..generate-pdf.php?oid=' . $order_id . '&item_id=' . $value->item_id . '" target="_blank">' .  pll_translate_string( 'PDF-Download', pll_current_language() ) . '</a></button><br/><br/>';
        }
}

订单的订单 ID 保存在订单 ID 列中。产品 ID 存储在每个订单的商品 ID 列中

【问题讨论】:

  • @LoicTheAztec 我会更新它。很抱歉给您带来麻烦
  • $cid, $user_id 仍未在您的代码中定义...
  • 你也应该提供一些与 center_codes 数据库表列相关的信息
  • @LoicTheAztec 您还需要更多信息吗?我已经更新了我的问题
  • @LoicTheAztec 添加了关于 3 小时前的评论。

标签: php wordpress woocommerce orders product-quantity


【解决方案1】:

已更新 - 您的代码中有一些错误……

  • 在您的第一个 foreach 循环之前获取WC_Order 对象(遍历订单项)
  • 对于项目数量使用FOR 循环 而不是FOREACH 循环
  • 您应该在 SQL 查询中直接使用“item_id”作为订单项 foreach 循环中的键。这比在订单项循环中嵌入另一个 foreach 循环要好得多。
  • 还有其他一些东西……

所以你的代码可能是(注释):

global $wpdb;

// Be sure that we get an order id from $_POST
if ( isset($_POST['oid']) && $_POST['oid'] > 0 ) {
    $order_id = (int) $_POST['oid'];
    $order    = new WC_Order( $_POST['oid'] ); // <=== Get the order object before your 1st foreach loop
}
// Be sure that we get the WC_Order object (valid order id)
if ( is_a($order, 'WC_Order') ) {

    $cid = get_user_meta( get_current_user_id(), 'company', true );

    if ( ! empty($cid) ) {
        
        // Loop through order items
        foreach( $order->get_items() as $item_id => $item ) {
            
            $result = $wpdb->get_results( $wpdb->prepare( "
                SELECT * 
                FROM {$wpdb->prefix}coupon_codes
                WHERE order_id = %d
                    AND item_id = %d
            ", $order_id, $item_id ) );
            
            // Quantity Loop (where variable $i will be increased one by one depending on quantity)
            for ( $i = 1; $i <= $item->get_quantity(); $i++ ) { // <=== A FOR loop (instead of a foreach)
                
                // You may need to use the variable $i somewhere below

                echo '<button><a style="color: #fff;" href="' . TS_SHOP_PLUGIN_URL . '..generate-pdf.php?oid=' . $order_id . '&item_id=' . $item_id . '" target="_blank">' .  pll_translate_string( 'PDF-Download', pll_current_language() ) . '</a></button><br/><br/>';
            }
        }
    }
}

现在我无法真正测试代码……但这应该可以帮助您解决问题。

最后一件事,如果需要,要从订单中获取用户 ID,请使用 $user_id = $order-&gt;get_user_id();。然后可以在(可能)中使用它:

$user_id = $order->get_user_id(); // <=== Get the user Id from the order
$cid     = get_user_meta( $user_id, 'company', true );

【讨论】:

  • @LoicTheAztex 哇。非常感谢。这个答案对我帮助很大!现在所有 PDF - 按钮都出现了!谢谢!
猜你喜欢
  • 2019-08-31
  • 1970-01-01
  • 2021-01-07
  • 2019-02-23
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2017-09-17
相关资源
最近更新 更多