WooCommerce将特定类别的产品排除在相关产品之外

时间:2013-08-08 作者:eddie

我试图在内容单一产品页面的相关产品中排除两个特定类别的产品。我偶然发现的最接近的想法是http://docs.woothemes.com/document/exclude-a-category-from-the-shop-page/. 你知道如何为相关产品而不是商店页面修改它吗?

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( \'knives\' ), // 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\' );
}

2 个回复
SO网友:jgangso

老问题,但在谷歌排名很高。这里有一个适用于当今Woocommerce的解决方案。

将此添加到您的函数中。php或自定义插件。

function exclude_brands_from_related( $categories ){
    // array of category id\'s that should be excluded
    $exclude_cats = array( \'100\', \'101\', \'102\');

    foreach( $categories as $index => $cat ){
        if( in_array( $cat->term_id, $exclude_cats ) ){
            unset($categories[$index]);
        }
    }

    return $categories;
}

add_filter( \'woocommerce_get_related_product_cat_terms\', \'exclude_brands_from_related\' );

并对标签执行相同操作:

function exclude_tags_from_related( $tags ){
    // array of tags that should be excluded
    $exclude_tags = array( \'discontinued\', \'whatever\', \'even-more\');

    foreach( $tags as $index => $tag ){
        if( in_array( $tag->slug, $exclude_tags ) ){
            unset($tags[$index]);
        }
    }

    return $tags;
}

add_filter( \'woocommerce_get_related_product_tag_terms\', \'exclude_tags_from_related\' );

SO网友:JMau

使用开发时WooCommerce 只需查看插件文件。我找到了一个名为related.php在里面woocommerce\\template\\single-product\\ :

$args = apply_filters(\'woocommerce_related_products_args\', array(
\'post_type\'     => \'product\',
\'ignore_sticky_posts\'   => 1,
\'no_found_rows\'     => 1,
\'posts_per_page\'    => $posts_per_page,
\'orderby\'       => $orderby,
\'post__in\'      => $related,
\'post__not_in\'      => array($product->id)
) );
这是一个简单的查询,因此很容易排除您想要的内容。

结束

相关推荐

Display All Non-Used Plugins

我的公司目前拥有大约20个多站点,并且每天都在增长。我们正在尝试通过插件并制定标准。IE,表单使用插件X。然而,我们还没有找到一种单一的方法来检查和系统地显示哪些插件甚至没有被使用。是否有一个功能可以向我们显示已使用或未使用的插件?我试着寻找我能想到的一切,但我一生都找不到答案。