隐藏WooCommerce商店页面中的类别

时间:2012-11-13 18:46:29

标签: php woocommerce

我一直试图隐藏SHOP页面中的特定类别。我找到了这段代码:

add_filter( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    $q->set( 'tax_query', array(array(
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => array( 'CATEGORY TO HIDE' ),
        'operator' => 'NOT IN'
    )));

    remove_filter( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

我已将此代码粘贴到我的主题function.php文件中,但我没有达到结果......

有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:6)

我知道这有点晚了,但我自己遇到了这个问题,并用以下功能解决了这个问题:

add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );

function get_subcategory_terms( $terms, $taxonomies, $args ) {

  $new_terms = array();

  // if a product category and on the shop page
  if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_shop() ) {

    foreach ( $terms as $key => $term ) {

      if ( ! in_array( $term->slug, array( '**CATEGORY-HERE**' ) ) ) {
        $new_terms[] = $term;
      }

    }

    $terms = $new_terms;
  }

  return $terms;
}

答案 1 :(得分:1)

从除管理后端之外的所有内容中隐藏类别的简单方法:

functions.php中:

add_filter( 'get_terms', 'hide_category', 10, 1 );
function hide_category( $terms ) {
  $new_terms = array();
  foreach ( $terms as $term ) {
    if ( $term->slug !== 'secret_category' ) {
      $new_terms[] = $term;
    } else if ( $term->taxonomy !== 'product_cat' || is_admin() ) {
      $new_terms[] = $term;
    }
  }
  return $new_terms;
}

如果您只想在商店中隐藏它,请将|| !is_shop()添加到else if条件中。

答案 2 :(得分:0)

如果您想在主题中隐藏某些类别,可以在exclude函数中传递wp_list_categories参数:

wp_list_categories( array(
'taxonomy'              =>  'product_cat',
'hide_empty'            =>  1,
'use_desc_for_title'    =>  0,
'title_li'              =>  ' ',
'show_count'            =>  0,
'exclude'               =>  '63'    // <-- Hidden) );

答案 3 :(得分:0)

以下代码段对我来说很合适:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() && is_shop() ) {

        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( 'your category slug' ), // Don't display products in the knives category on the shop page
            'operator' => 'NOT IN'
        )));

    }

    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

我想知道如何通过产品搜索搜索可以搜索的类别中的产品,同时使用代码段将这些产品完全隐藏起来。