对未登录的用户隐藏产品(使用标记)


hide products from users who are not logged in (using tags)?

非常简单的概念。。。如果用户没有登录,我想在WooCommerce的任何地方隐藏所有带有"批发"标签的产品……我已经接近了,但还没有骰子。

我目前拥有的东西

$product_tags = wp_get_post_terms( $product->id, 'product_tag' );
if ( ! empty( $product_tags ) ) {
    foreach( $product_tags as $tag ) {
        if ( $tag->slug === 'wholesale' && ! is_user_logged_in() ) {
            return;
        }
    }
}

请参阅Gist:https://gist.github.com/DerekFoulk/d94646da9f22d5dddff6

我的努力成果如下:http://gigacord.com/shop/

从结果中可以看出,产品网格中存在漏洞,因为该行在产品1/3(每行)上应该具有类.first,在项目3/3上应该具有.last。我目前"删除"产品的地方显然是在计算每行项目数然后分配所述类的逻辑之后。

这个片段并不能满足我的所有需求。简而言之,我想尽快(在我的主题开始构建其元素之前)将产品从产品数组中删除。我还想在直接访问产品页面时隐藏所有产品信息(可能是另一个问题)。

那么,是否有一个WooCommerce挂钩可以在产品展示的任何地方运行?如果是,我如何使用该挂钩隐藏带有"批发"标签的产品?

最好使用pre_get_posts

在这里。。。

function rei_exclude_by_product_tag( $query ) {
    if ( $query->is_main_query() && is_woocommerce() && !is_user_logged_in() ) {
        $taxquery = array(
            array(
                    'taxonomy' => 'product_tag',
                    'field' => 'id',
                    'terms' => array( 6 ), // the ID of the product tag
                    'operator'=> 'NOT IN' // exclude
                )
            );
        $query->set('tax_query', $taxquery);
    }
}
add_action( 'pre_get_posts', 'rei_exclude_by_product_tag' );

感谢Reigel!!一直在找这个。

"旁注";Reigel":(对于那些调查类别的人)

您可以交换";product_tag";用";product_cat";也

在针对公共类别时为我工作。