Отображать WooCommerce Моя учетная запись Заказы только в том случае, если товары относятся к определенной категории

Итак, я создаю пользовательский раздел на my account/my-orders.php< /a> файл шаблона, чтобы отображать историю заказов только для любых продуктов, которые находятся в категории курсов.

В настоящее время у меня есть это:

<?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'>
                            <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'>Date of course:</p>
                                                                                </div>
                                                                                <div class='large-auto cell'>
                                                                                        <!-- Date of course from calendar here -->

                                                                                        <p class='noweight title'>21.01.21</p>
                                                                                </div>
                                                                        </div>
                                                                        <div class='grid-x'>
                                            <div class='large-5 cell'>
                                                                                        <p class='bold title'>Paid on:</p>
                                                                                </div>
                                                                                <div class='large-auto cell'>
                                                                                        <!-- Purchase date here -->
                                                                                        <p class='noweight title'><time datetime="<?php echo esc_attr( $order->get_date_created()->date( 'c' ) ); ?>"><?php echo esc_html( wc_format_datetime( $order->get_date_created() ) ); ?></time></p>
                                                                                </div>
                                                                        </div>
                                                                        <div class='grid-x'>
                                            <div class='large-5 cell'>
                                                                                        <p class='bold title'>Status:</p>
                                                                                </div>
                                                                                <div class='large-auto cell'>
                                                                                        <!-- Purchase status here -->

                                                                                        <p class='noweight title'><?php echo esc_html( 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 echo the_permalink(); ?>">View course overview</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 echo the_permalink(); ?>">Get PPE for this course</a>
                                                                </div>
                                                        </div>
                                                </div>
                                        </div>
                                </div>
                                <!-- Course loop end -->
                    <?php endforeach; ?>
                </div>
                        <?php endforeach; ?>
                </div>
        </section>

    <?php } else { ?>
dsfdsf
    <?php } ?>

<?php endif; ?>

Это прокручивает историю заказов в цикле, как я этого хочу, но я добавил условное if is_product_category('course') вокруг него, и он ничего не протягивает.

Чувствуете, что я близок, но чего-то не хватает?


person Sadie    schedule 04.09.2020    source источник


Ответы (1)


В вашем коде есть небольшие ошибки… Чтобы проверить категорию продукта, вам нужно проверить элементы заказа (для каждого заказа), используя has_terms() Условная функция Wordpress выглядит следующим образом:

<?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; ?>

Он должен работать.

person LoicTheAztec    schedule 04.09.2020
comment
Это вытащило все заказы курса, но они дублируются, поэтому у меня отображаются 4 экземпляра одного и того же заказа? Есть ли способ исправить цикл, чтобы показать только один экземпляр? Также показывать только курс в порядке и никаких других продуктов, которые не относятся к курсам, так как они тоже отображаются. - person Sadie; 04.09.2020
comment
Мой ответ здесь - это просто ответ на ваш первоначальный вопрос с предоставленным вами материалом (и никто не может догадаться, из чего сделаны ваши заказы). Если у вас есть другие вопросы, вам лучше задать новый вопрос. - person LoicTheAztec; 06.09.2020