php 从单个产品Meta部分删除特定的WooCommerce类别

fslejnso  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(124)

我发现的每个解决方案基本上都是从产品中取消分配类别。这不是我想要的我正在使用产品类别为其他插件提供功能。在我的情况下,产品类别“预购”有一个存款应用使用YITH插件,产品类别“拟合”有一个额外的复选框,为客户建议,如果他们想要一个报价的产品拟合服务。
我试图实现的是从“Meta”部分的单一产品页面中删除特定显示的类别术语。客户不需要知道像“预订”和“装修”类别在那里,我不希望他们能够选择超链接来查看类别页面。是的,我知道该页面仍然可用,但风险很小。
网站上的HTML输出看起来像这样:

<div class="product_meta">
    <span class="sku_wrapper">SKU: <span class="sku">...</span></span>
    <span class="posted_in">
            Categories: 
            <a href="URL" rel="tag">Fitting</a>
            , 
            <a URL" rel="tag">Category 1</a>
            , 
            <a href="URL" rel="tag">Category 2</a>
            , 
            <a href="URL" rel="tag">Preorder</a>            
    </span>
</div>

有没有一种方法可以使用PHP来实现这一点?
如果没有,我也一直在玩jQuery解决方案,但也在挣扎,因为我无法选择前面的逗号,它在a标记之外,但在父span内。
我写的所有代码在前端看起来都是这样的:Categories: , Category 1,,Category 2,,其中逗号未删除。
感谢您的帮助!

ruoxqz4g

ruoxqz4g1#

以下代码将删除单个产品Meta部分中显示的特定定义的产品类别术语:

add_filter( 'get_the_terms', 'filter_specific_product_categories', 10, 3 );
function filter_specific_product_categories( $terms, $post_id, $taxonomy ) {
    global $woocommerce_loop;
    
    if ( $taxonomy === 'product_cat'
    && isset($woocommerce_loop['name'])  && empty($woocommerce_loop['name']) 
    && isset($woocommerce_loop['total']) && $woocommerce_loop['total'] == 0 
    && isset($woocommerce_loop['loop'])  && $woocommerce_loop['loop'] == 1 ) {
        // Here below define your product category term(s) slug(s) in the array
        $targeted_slugs = array('preorder', 'fitting');

        // Loop through the terms
        foreach ( $terms as $key => $term ) {
            if ( in_array( $term->slug, $targeted_slugs ) ) {
                unset($terms[$key]); // Remove WP_Term object
            }
        }
    }
    return $terms;
}

代码放在子主题的functions.php文件中(或插件中)。测试和作品。

相关问题