简体   繁体   English

在WooCommerce商店页面中隐藏特定类别

[英]Hide specific category in WooCommerce shop page

I have a shop page in WooCommerce, and i'm using this to override the "archive-product.php" 我在WooCommerce中有一个商店页面,我正在用它来覆盖“ archive-product.php”

My goal was to display my categories in a nest, with a header above each product category. 我的目标是将我的类别显示在一个嵌套中,每个产品类别上方都有一个标题。 This achieves that, except I don't want all of the categories to be displayed. 这样可以达到目的,除了我不希望显示所有类别。 Ideally, 2 of my three product categories would be listed with the third one remaining hidden. 理想情况下,我的三个产品类别中的两个将被列出,而第三个则保持隐藏。

Honestly, I'm a graphic designer and most of my knowledge remains in CSS and HTML... so any help would be greatly appreciated. 老实说,我是一名平面设计师,我的大部分知识仍然掌握在CSS和HTML中...因此,我们将不胜感激。

Thanks! 谢谢!

<?php
    /**
     * woocommerce_before_main_content hook.
     *
     * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
     * @hooked woocommerce_breadcrumb - 20
     */
    do_action( 'woocommerce_before_main_content' );
?>

    <?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>

        <h1 class="page-title"><?php woocommerce_page_title(); ?></h1>

    <?php endif; ?>

    <?php
        /**
         * woocommerce_archive_description hook.
         *
         * @hooked woocommerce_taxonomy_archive_description - 10
         * @hooked woocommerce_product_archive_description - 10
         */
        do_action( 'woocommerce_archive_description' );
    ?>

    <?php if ( have_posts() ) : ?>

        <?php
            /**
             * woocommerce_before_shop_loop hook.
             *
             * @hooked woocommerce_result_count - 20
             * @hooked woocommerce_catalog_ordering - 30
             */
            do_action( 'woocommerce_before_shop_loop' );

            /* Category - SubCategory START */
            $term           = get_queried_object();
            $parent_id      = empty( $term->term_id ) ? 0 : $term->term_id;

            $product_categories = get_categories( array( 'taxonomy' => 'product_cat', 'child_of' => $parent_id) );

            $i = 1;
            foreach ($product_categories as $product_category) {
                echo '<h2>'.$product_category->name.'</h2>';
                woocommerce_product_loop_start(); //open ul

                $args = array(
                    'posts_per_page' => -1,
                    'tax_query' => array(
                    'relation' => 'AND',
                        array(
                            'taxonomy' => 'product_cat',
                            'field' => 'slug',
                            'terms' => $product_category->slug
                        ),
                    ),
                    'post_type' => 'product',
                    'orderby' => 'menu_order',
                    'order' => 'asc',
                );
                $cat_query = new WP_Query( $args );

                while ( $cat_query->have_posts() ) : $cat_query->the_post();
                    wc_get_template_part( 'content', 'product' );
                endwhile; // end of the loop.
            wp_reset_postdata();
            woocommerce_product_loop_end(); //close ul
            if ( $i < count($product_categories) )
                echo '<div class="content-seperator"></div>';
            $i++;
            }//foreach

            /* Category - SubCategory END */

            /**
             * woocommerce_after_shop_loop hook.
             *
             * @hooked woocommerce_pagination - 10
             */
            do_action( 'woocommerce_after_shop_loop' );
        ?>

    <?php elseif ( ! woocommerce_product_subcategories( array( 'before' => woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) : ?>

        <?php wc_get_template( 'loop/no-products-found.php' ); ?>

    <?php endif; ?>

<?php
    /**
     * woocommerce_after_main_content hook.
     *
     * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
     */
    do_action( 'woocommerce_after_main_content' );
?>

<?php
    /**
     * woocommerce_sidebar hook.
     *
     * @hooked woocommerce_get_sidebar - 10
     */
    do_action( 'woocommerce_sidebar' );
?>

Modifying 修改

$product_categories = get_categories( array( 'taxonomy' => 'product_cat', 'child_of' => $parent_id) );

with: 有:

$excludedCats = array(23,12,55); //Where 23,12 and 55 are category ids you want to leave out
$excludedCats = "23,12,55" //This works too

$product_categories = get_categories( array( 'taxonomy' => 'product_cat', 'child_of' => $parent_id, 'exclude' => $excludedCats) );

should do what you need. 应该做你需要的。 Sources: 1 , 2 and 3 来源: 123

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM