Php 隐藏“;“缺货”;WooCommerce主页上的产品
我不想在我的主页上显示“缺货”的产品。 我尝试了一些钩子和过滤器来改变产品查询,但它不起作用。 我还将“隐藏缺货”检查到了woocommerce设置区域 但产品仍在出现。我能知道发生了什么事吗 我尝试使用此筛选器挂钩来更改主产品查询:Php 隐藏“;“缺货”;WooCommerce主页上的产品,php,wordpress,woocommerce,product,hook-woocommerce,Php,Wordpress,Woocommerce,Product,Hook Woocommerce,我不想在我的主页上显示“缺货”的产品。 我尝试了一些钩子和过滤器来改变产品查询,但它不起作用。 我还将“隐藏缺货”检查到了woocommerce设置区域 但产品仍在出现。我能知道发生了什么事吗 我尝试使用此筛选器挂钩来更改主产品查询: add_action( 'pre_get_posts', 'custom_pre_get_posts_query' ); function custom_pre_get_posts_query( $q ) { if ( ! $q->is_main_que
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() ) {
$q->set( 'meta_query', array(array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
我想把缺货的产品藏起来,但什么都没用。非常感谢您的帮助。您正在使用旧版本的代码。试试这种方法
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() || is_admin() || ! $q->is_front_page() ) {
return;
}
if ( $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' ) ) {
$tax_query = (array) $q->get('tax_query');
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'term_taxonomy_id',
'terms' => array( $outofstock_term->term_taxonomy_id ),
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
}
要从主页中排除“缺货”产品,可以采用不同的方法
1) 元查询使用专用的woocommerce\u product\u Query\u元查询
过滤器挂钩:
add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!=',
);
}
return $meta_query;
}
add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => array('outofstock'),
'operator' => 'NOT IN'
);
}
return $tax_query;
}
2) 税务查询使用专用的woocmerce\u product\u Query\u Tax\u Query
过滤器挂钩:
add_filter( 'woocommerce_product_query_meta_query', 'filter_product_query_meta_query', 10, 2 );
function filter_product_query_meta_query( $meta_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!=',
);
}
return $meta_query;
}
add_filter( 'woocommerce_product_query_tax_query', 'filter_product_query_tax_query', 10, 2 );
function filter_product_query_tax_query( $tax_query, $query ) {
// On woocommerce home page only
if( is_front_page() ){
// Exclude products "out of stock"
$tax_query[] = array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => array('outofstock'),
'operator' => 'NOT IN'
);
}
return $tax_query;
}
代码进入活动子主题(或活动主题)的functions.php文件。两者都有效
相关:更新 检查当前主题文件夹中的
font-page.php
文件,可能您的开发人员在模板文件中添加了自定义代码,而没有调用任何钩子操作
旧答案
为什么不使用WooCommerce设置
因为它只适用于主页(如标题所示),如果你阅读了问题,那么OP已经尝试了你的建议。它在“VisualComposer”Woocommerce小部件上也非常有效。