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

仅当项目属于特定类别时显示 WooCommerce 我的帐户订单

仅当项目属于特定类别时显示 WooCommerce 我的帐户订单

PHP
胡子哥哥 2023-12-15 15:01:53
因此,我在 WooCoommerce 的 my account/my-orders.php 模板文件上构建一个自定义部分,以仅显示“课程”类别下的任何产品的订单历史记录。我目前有这个:<?php$my_orders_columns = apply_filters(    'woocommerce_my_account_my_orders_columns',    array(        'order-number'  => esc_html__( 'Order', 'woocommerce' ),        'order-date'    => esc_html__( 'Date', 'woocommerce' ),        'order-status'  => esc_html__( 'Status', 'woocommerce' ),        'order-total'   => esc_html__( 'Total', 'woocommerce' ),        'order-actions' => '&nbsp;',    ));$customer_orders = get_posts(    apply_filters(        'woocommerce_my_account_my_orders_query',        array(            'numberposts' => $order_count,            'meta_key'    => '_customer_user',            'meta_value'  => get_current_user_id(),            'post_type'   => wc_get_order_types( 'view-orders' ),            'post_status' => array_keys( wc_get_order_statuses() ),        )    ));if ( $customer_orders ) : ?>    <?php if(is_product_category('course')) { ?>            <section class='courseHistory'>                <div class='grid-container full'>                     <?php                        foreach ( $customer_orders as $customer_order ) :                            $order      = wc_get_order( $customer_order ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited                            $item_count = $order->get_item_count();                        ?>                    <div class='grid-x'>                              <!-- Course loop to go here -->                                <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>                            <div class='large-12 cell marB20 shadow'>                        <div class='grid-x'>这是按照我想要的方式循环拉取订单历史记录,但我已经在其周围添加了条件if is_product_category('course'),但它没有拉出任何事情都通过。感觉我很接近但错过了什么?
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您的代码中存在一些小错误...要检查产品类别,您需要使用 has_terms() Wordpress 条件函数检查订单项目(每个订单),如下所示:< /span>

<?php

$my_orders_columns = apply_filters(

    'woocommerce_my_account_my_orders_columns',

    array(

        'order-number'  => esc_html__( 'Order', 'woocommerce' ),

        'order-date'    => esc_html__( 'Date', 'woocommerce' ),

        'order-status'  => esc_html__( 'Status', 'woocommerce' ),

        'order-total'   => esc_html__( 'Total', 'woocommerce' ),

        'order-actions' => '&nbsp;',

    )

);


$customer_orders = get_posts(

    apply_filters(

        'woocommerce_my_account_my_orders_query',

        array(

            'numberposts' => $order_count,

            'meta_key'    => '_customer_user',

            'meta_value'  => get_current_user_id(),

            'post_type'   => wc_get_order_types( 'view-orders' ),

            'post_status' => array_keys( wc_get_order_statuses() ),

        )

    )

);


$product_category_terms = array('course'); // <== Here the defined product category term(s)


if ( $customer_orders ) : ?>

    <section class='courseHistory'>

        <div class='grid-container full'>

            <?php foreach ( $customer_orders as $customer_order ) :

                $order      = wc_get_order( $customer_order ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited

                $item_count = $order->get_item_count();


                $category_found = false; // Initializing


                // Loop through order items

                foreach ( $order->get_items() as $item ) {

                    if ( has_term( $product_category_terms, 'product_cat', $item->get_product_id() ) ) {

                        $category_found = true;

                        break;

                    }

                }


                // If the product category is not found in order items we jump to next order

                if ( ! $category_found ) continue;

            ?>

            <div class='grid-x'>

            <!-- Course loop to go here -->

            <?php foreach ( $my_orders_columns as $column_id => $column_name ) : ?>

                <div class='large-12 cell marB20 shadow'>

                    <div class='grid-x'>

                        <div class='small-12 medium-12 large-3 cell courseImg'>

                            <!-- Course image here -->

                            <img src="<?php echo get_template_directory_uri(); ?>/assets/images/course.png"/>

                        </div>

                        <div class='small-12 medium-12 large-9 cell courseInfo whiteBg'>

                            <div class='grid-x grid-margin-x align-middle'>

                                <div class='small-12 medium-12 large-7 cell'>

                                    <div class='grid-x'>

                                        <div class='large-5 cell'>

                                            <p class='bold title'>Course name:</p>

                                        </div>

                                        <div class='large-auto cell'>

                                            <!-- Course title here -->

                                            <p class='noweight title'><?php echo the_dramatist_get_order_prod_name( $order ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></p>

                                        </div>

                                    </div>

                                    <div class='grid-x'>

                                        <div class='large-5 cell'>

                                            <p class='bold title'><?php esc_html_e("Date of course:", "woocommerce"); ?></p>

                                        </div>

                                        <div class='large-auto cell'>

                                            <!-- Date of course from calendar here -->

                                            <p class='noweight title'><?php _e("21.01.21", "woocommerce"); ?></p>

                                        </div>

                                    </div>

                                    <div class='grid-x'>

                                        <div class='large-5 cell'>

                                            <p class='bold title'><?php esc_html_e("Paid on:", "woocommerce"); ?></p>

                                        </div>

                                        <div class='large-auto cell'>

                                            <!-- Purchase date here -->

                                            <p class='noweight title'><time datetime="<?php esc_attr_e( $order->get_date_created()->date( 'c' ) ); ?>"><?php  esc_html_e( wc_format_datetime( $order->get_date_created() ) ); ?></time></p>

                                        </div>

                                    </div>

                                    <div class='grid-x'>

                                        <div class='large-5 cell'>

                                            <p class='bold title'><?php esc_html_e("Status:", "woocommerce"); ?></p>

                                        </div>

                                        <div class='large-auto cell'>

                                            <!-- Purchase status here -->

                                            <p class='noweight title'><?php esc_html_e( wc_get_order_status_name( $order->get_status() ) ); ?></p>

                                        </div>

                                    </div>

                                </div>

                                <div class='small-12 medium-12 large-5 cell'>

                                    <!-- Link to course to go through to shop info page? -->

                                    <a class='orangeB' href="<?php the_permalink(); ?>"><?php esc_html_e("View course overview", "woocommerce"); ?></a>

                                    <!-- Link to PPE for this course here. I've done it so each PPE product will have a course sub category

                                    that can be assigned to it to make filtering easier. PPE Cat > Course PPE sub cat -->

                                    <a class='blackB marT20' href="<?php the_permalink(); ?>"><?php esc_html_e("Get PPE for this course", "woocommerce"); ?></a>

                                </div>

                            </div>

                        </div>

                    </div>

                </div>

                <!-- Course loop end -->

                <?php endforeach; ?>

            </div>

            <!-- Orders loop end -->

            <?php endforeach; ?>

        </div>

    </section>

<?php endif; ?>

它应该有效。


查看完整回答
反对 回复 2023-12-15
  • 1 回答
  • 0 关注
  • 55 浏览

添加回答

举报

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