为了账号安全,请及时绑定邮箱和手机立即绑定

处理 Woocommerce 上的产品类型

处理 Woocommerce 上的产品类型

PHP
Qyouu 2023-05-26 16:16:57
如果我尝试以这种方式获取产品类型,我真的很困惑如何在 Woocommerce 中正确获取产品类型:$product->get_type();simple即使产品是可变的,它也总是返回,然后我尝试了以下操作:$terms = get_the_terms($this->product->get_id(), 'product_type');$product_type = (!empty($terms)) ? sanitize_title(current($terms)->name) : 'simple';从上面的代码可以看出,它获取了product_type产品的分类法,如果存在则返回分类法名称,否则返回simple。然而,即使产品是可变的,它仍然会返回simple,我现在不知道该怎么办,因为我从 woocommerce 挂钩的参数中获取产品对象,我不知道它是什么类型的产品,我需要制作这个验证。如何正确获取woocommerce中的产品类型?更新根据要求,我将添加我使用的完整代码,这样您就可以更好地了解我想要实现的目标。基本上我想在订单行项目管理编辑屏幕中将元字段显示为一列。add_action( 'woocommerce_admin_order_item_values', bani_add_cost_price_column_order_value_admin_edit', 10, 3);function ebani_add_cost_price_column_order_value_admin_edit( $product, $item, $item_id ) {        $order = $item->get_order();        ?>    <td class="item_cost_price" width="1%" data-sort-value="<?php echo esc_attr( $order->get_item_subtotal( $item, false, true ) ); ?>">        <div class="view">            <?php            if( ! is_null( $product ) ){                                //The right way to get the product type                $terms = get_the_terms( $product->get_id(), 'product_type' );                $product_type = ( !empty( $terms ) ) ? sanitize_title( current( $terms )->name ) : 'simple';                echo $product_type;                if( $product_type == 'variable' ) {                    $variation_id = $item->get_variation_id();                    echo wc_price( get_post_meta( $variation_id, 'variation_cost', true ), array( 'currency' => $order->get_currency() ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped                }elseif( $product_type == 'simple' ) 
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我不是很明白get_the_termsget_type()应该足够了。


// Add header

function action_woocommerce_admin_order_item_headers( $order ) {

    echo '<th class="line_mytitle sortable" data-sort="your-sort-option">My Title</th>';

}

add_action( 'woocommerce_admin_order_item_headers', 'action_woocommerce_admin_order_item_headers', 10, 1 );


//Add content

function action_woocommerce_admin_order_item_values( $product, $item, $item_id ) {

    $order = $item->get_order();


    ?>

    <td class="item_cost_price" width="1%" data-sort-value="<?php echo esc_attr( $order->get_item_subtotal( $item, false, true ) ); ?>">

        <div class="view">

            <?php

            if( ! is_null( $product ) ) {

                // Get product type

                $product_type = $product->get_type();


                echo 'product type = ' . $product_type . '<br>';


                if( $product_type == 'variation' ) {

                    $variation_id = $item->get_variation_id();

                    echo wc_price( get_post_meta( $variation_id, 'variation_cost', true ), array( 'currency' => $order->get_currency() ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

                } elseif( $product_type == 'simple' ) {

                    echo wc_price( get_post_meta( $item->get_product_id(), 'cost_price', true ), array( 'currency' => $order->get_currency() ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

                } else {

                    echo "No aplica";

                }

            } else {

                echo 'No aplica';

            }

            ?>

        </div>

    </td>

    <?php

}

add_action( 'woocommerce_admin_order_item_values', 'action_woocommerce_admin_order_item_values', 10, 3 );



查看完整回答
反对 回复 2023-05-26
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信