如何从“备件”类别中排除产品以显示在woocommerce产品标签内?我想列出/ tags /中的所有产品,但如果该产品属于“备件”类别,则只需将字体列入其中。我需要使用哪种功能。
我在网上搜索了这个,但它确实有效。
答案 0 :(得分:1)
在这个挂钩在"spare-parts"
过滤器钩子中的自定义函数中,这可以轻松完成。
因此,
add_filter( 'woocommerce_product_query_tax_query', 'exclude_specific_product_category_query', 10, 2 ); function exclude_specific_product_category_query( $tax_query, $query ) { // Only on Product Tag archives pages if( is_admin() || ! is_product_tag() ) return $tax_query; // HERE Define your product category SLUGs to be excluded $terms = array( 'spare-parts' ); // SLUGs only // The taxonomy for Product Categories $taxonomy = 'product_cat'; // Add your criteria $tax_query[] = array( 'taxonomy' => $taxonomy, 'field' => 'slug', // Or 'name' or 'term_id' 'terms' => $terms, 'operator' => 'NOT IN', // Excluded ); return $tax_query; }
产品类别 slug 的所有产品都将从产品代码存档页面中排除。
以下是代码:
WP_query
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
经过测试和工作。
因此,如果您需要在 tax_query
中使用此功能,您将使用类似的 // HERE Define your product category SLUGs to be excluded
$terms_cat = array( 'spare-parts' ); // SLUGs only
// HERE Define your product tag SLUGs to be included
$terms_tag = array( 'special', 'wear' ); // SLUGs only
// The taxonomies
$taxonomy_tag = 'product_tag'; // Product tag
$taxonomy_cat = 'product_cat'; // Product Category
// The Query
$loop = new WP_Query( array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
'relation' => 'AND',
array( // The tag query (Include)
'taxonomy' => $taxonomy_tag,
'field' => 'slug',
'terms' => $terms_tag,
),
array( // the category query (exclude)
'taxonomy' => $taxonomy_cat,
'field' => 'slug', // Or 'name' or 'term_id'
'terms' => $terms_cat,
'operator' => 'NOT IN', // Excluded
),
)
));
if ( $loop->have_posts() ):
while ( $loop->have_posts() ):
$loop->the_post();
$products_ids[] = $loop->post->ID; // Set the product Ids in an array
endwhile;
endif;
// always reset the WP_Query
wp_reset_query();
// Convert the array in a string with all product Ids coma separated
$product_ids_string = implode( ', ', $products_ids );
// Output Ids
echo $product_ids_string;
,其中您将排除某些产品类别和包括一些产品标签......
在此示例中,它将输出以逗号分隔的产品ID字符串:
return s.Length - s.Replace(x.ToString(),"").Length;
经过测试和工作。
相关文档:apply