2017-06-13 27 views
0

私のウェブサイトの周りに特定の商品カテゴリを隠す方法について誰かが手掛かりを持っているかどうかを知りたいと思います。私のWordpressのWooCommerceウェブサイトの "ショップ"、 "関連商品"、 "検索"の意味。 「ショップ」ページは私がを行っている(そしてそれが働いている)のためにWooCommerce 3.x - 製品カテゴリを非表示

以下:検索については

function custom_pre_get_posts_q($q) { 

     $tax_query = (array) $q->get('tax_query'); 

     $tax_query[] = array(
       'taxonomy' => 'product_cat', 
       'field' => 'slug', 
       'terms' => array('carton'), // Don't display products in the composite category on the shop page. 
       'operator' => 'NOT IN' 
     ); 


     $q->set('tax_query', $tax_query); 

    } 
    add_action('woocommerce_product_query', 'custom_pre_get_posts_q'); 

私は次のことを試してみましたが、それは動作しません。

function exclude_category_from_search($query) { 
if ($query->is_search) { 
    $cat_id = get_cat_ID('carton'); 
    $query->set('cat', '-'.$cat_id); 
} 
    return $query; 
} 

add_filter( 'pre_get_posts'、 'exclude_category_from_search');私も私の子テーマに次のように持って

function wc_remove_related_products($args) 
{ 
    if (is_product() && has_term('carton', 'product_cat')) 
    { 
     return array(); 
    } 

    return $args; 
} 
add_filter('woocommerce_related_products_args','wc_remove_related_products', 10); 

は最後に、関連製品のために私はWC 3.xのため、非推奨と思われる以下のことを試してみました

`    <?php foreach ($related_products as $related_product) : ?> 

       <?php 
         $post_object = get_post($related_product->get_id()); 

         setup_postdata($GLOBALS['post'] =& $post_object); 

         wc_get_template_part('content', 'product'); ?> 

       <?php endforeach; ?>` 

私は、他のクラスで使ったコードのこの部分で商品カテゴリを隠すことができることを知っています:

  global $post; 
     $terms = wp_get_post_terms($post->ID, 'product_cat'); 
     foreach ($terms as $term) $categories[] = $term->slug; 

     if (in_array('children', $categories)) { 

誰でも、新しいバージョンのWoomCommerceでそれを行う方法を知っていますか? 私は多くの研究をしましたが、この新しいバージョン以降、廃止された回答のように見えます。

PS:私はこのカテゴリを使用して複合商品を作成しているので、これらの商品を非表示にしても削除することはできません。

乾杯

+0

こんにちは、回答はありますか?私は同じように見ています。 – mikesneider

+0

ちょっと@mikesneider私は答えを掲載しました。はい、私は最後にそれを理解しました;) 質問があれば、お気軽にお問い合わせください。 – bkseen

答えて

0

を検索し、SHOPページからカテゴリ(ここでは "カートン")を除外するにはfunction.phpファイルに以下の機能を追加し、検索

からwoocommerceカテゴリを除外します私の子供のテーマの私のfunction.phpファイルに次を追加してください:

/* hide CARTON category SEARCH 
=============================*/ 
function sm_pre_get_posts($query) { 

    if ( $query->is_search()) { 
     $query->set('post_type', array('product')); 
     $tax_query = array(
      array(
       'taxonomy' => 'product_cat', 
       'field' => 'slug', 
       'terms' => 'carton', //slug name of category 
       'operator' => 'NOT IN', 
      ), 
     ); 
     $query->set('tax_query', $tax_query); 
    } 

} 
add_action('pre_get_posts', 'sm_pre_get_posts'); 

/* hide CARTON category for SHOP pages 
====================================*/ 
function custom_pre_get_posts_query($q) { 

    $tax_query = (array) $q->get('tax_query'); 

    $tax_query[] = array(
      'taxonomy' => 'product_cat', 
      'field' => 'slug', 
      'terms' => array('carton'), // Don't display products in the carton category on the shop page. 
      'operator' => 'NOT IN' 
    ); 

    $q->set('tax_query', $tax_query); 
} 
add_action('woocommerce_product_query', 'custom_pre_get_posts_query'); 

「関連製品」に関しては、それを微調整する必要がありましたが、最終的には、関連するwoocommerceを向上させています。私は基本的に、関連商品をブランド、カテゴリ&シーズンの順にソートしています。 「カートン」はカテゴリであるため、検索しません。

global $post; 
$terms = get_the_terms($post->ID, 'product_cat'); 
foreach ($terms as $term) { 
    $myTerm = $term->slug; 
    if($myTerm == 'mens' || $myTerm == 'ladies'){ 
     $mainCat = $myTerm; 
    }else if($myTerm == 'accessories'){ 
     $mainCat = $myTerm; 
    }else if($myTerm == 'children'){ 
     $mainCat = $myTerm;    
    }else if($myTerm == 'summer' || $myTerm == 'winter'){ 
     $seasonCat = $myTerm; 
    } 
} 
    $terms = get_the_terms(get_the_ID(), 'pa_brand'); 
    foreach ($terms as $term) { 
     $theBrand = $term->slug; 
    } 

?> 

    <div class="product-carousel related-products spb_content_element"> 

     <div class="title-wrap clearfix"> 
      <h3 class="spb-heading"><span><?php echo esc_attr($related_heading); ?></span></h3> 
      <div class="carousel-arrows"><a href="#" class="carousel-prev"><i class="sf-icon-chevron-prev"></i></a><a href="#" class="carousel-next"><i class="sf-icon-chevron-next"></i></a></div> 
     </div> 

     <div class="related products carousel-items <?php echo esc_attr($gutter_class); ?> product-type-<?php echo esc_attr($related_product_display_type); ?>" id="carousel-<?php echo esc_attr($sf_carouselID); ?>" data-columns="<?php echo esc_attr($woocommerce_loop['columns']); ?>"> 
     <?php 
      $args = array(
       'posts_per_page' => -1, 
       'tax_query' => array(
        array(
         'taxonomy' => 'pa_brand', 
         'field' => 'slug', 
         'terms' => $theBrand 
        ), 
        array(
         'taxonomy' => 'product_cat', 
         'field' => 'slug', 
         'terms' => $mainCat 
        ), 
        array(
         'taxonomy' => 'product_cat', 
         'field' => 'slug', 
         'terms' => $seasonCat 
        ) 
       ), 
       'post_type' => 'product', 
       'orderby'  => 'rand', 
       'order'   => 'desc', 
       'posts_per_page' => 12 
      ); 
      $loop = new WP_Query($args); 
      if ($loop->have_posts()) { 
       while ($loop->have_posts()) : $loop->the_post(); 
        wc_get_template_part('content', 'product'); 
       endwhile; 
      } else { 
       echo __('No products found'); 
      } 
      wp_reset_postdata(); ?>      

     </div> 

    </div> 
2

は、

function sm_pre_get_posts($query) { 

    if (! is_admin() && $query->is_main_query() && $query->is_search()) { 
     $query->set('post_type', array('product')); 
     $tax_query = array(
      array(
       'taxonomy' => 'product_cat', 
       'field' => 'slug', 
       'terms' => 'carton', //slug name of category 
       'operator' => 'NOT IN', 
      ), 
     ); 
     $query->set('tax_query', $tax_query); 
    } 

} 
add_action('pre_get_posts', 'sm_pre_get_posts'); 
関連する問題