![](/img/trans.png)
[英]Get all WooCommerce products from a category that have specific meta data
[英]Filter products from a specific custom meta data in Woocommerce shop page
我需要過濾 WooCommerce 商店頁面,並且只想顯示需要自定義產品元數據的產品。 這是我在archive-product.php
中找到的:
/**
* Hook: woocommerce_before_shop_loop.
*
* @hooked wc_print_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*
* @hooked WC_Structured_Data::generate_product_data() - 10
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
那么如何在這部分中傳遞過濾器值以僅顯示具有元鍵 X 和值 Y 的產品?
更新
我已經按照 Loic 所說的方式進行了嘗試,但是當我檢查多個元值時,它會導致問題並且我看不到任何產品:
add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
// Only on shop pages
if( ! is_shop() ) return $meta_query;
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value',
'compare' => 'EXIST'
);
//Don't works when adding the second one
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value_2',
'compare' => 'EXIST'
);
return $meta_query;
};
我有兩個產品:
the_value_2
the_value
所以我在這里期待這兩種產品。 當我刪除第二個meta_query
時,我只得到產品 B。
我需要過濾WooCommerce商店頁面,只希望顯示需要自定義產品元數據的產品。 這是我在archive-product.php
找到的:
/**
* Hook: woocommerce_before_shop_loop.
*
* @hooked wc_print_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*
* @hooked WC_Structured_Data::generate_product_data() - 10
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
那么,如何在此部分中傳遞過濾器值以僅顯示具有元鍵X和值Y的產品?
更新
我已經按照Loic所說的方法進行了嘗試,但是當我檢查了一個以上的meta值時,就會引起問題,並且看不到任何產品:
add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
// Only on shop pages
if( ! is_shop() ) return $meta_query;
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value',
'compare' => 'EXIST'
);
//Don't works when adding the second one
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value_2',
'compare' => 'EXIST'
);
return $meta_query;
};
我有兩種產品:
the_value_2
the_value
因此,我期望這里有這兩種產品。 當我刪除第二個meta_query
我只得到產品B。
我需要過濾WooCommerce商店頁面,只希望顯示需要自定義產品元數據的產品。 這是我在archive-product.php
找到的:
/**
* Hook: woocommerce_before_shop_loop.
*
* @hooked wc_print_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
/**
* Hook: woocommerce_shop_loop.
*
* @hooked WC_Structured_Data::generate_product_data() - 10
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
那么,如何在此部分中傳遞過濾器值以僅顯示具有元鍵X和值Y的產品?
更新
我已經按照Loic所說的方法進行了嘗試,但是當我檢查了一個以上的meta值時,就會引起問題,並且看不到任何產品:
add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
// Only on shop pages
if( ! is_shop() ) return $meta_query;
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value',
'compare' => 'EXIST'
);
//Don't works when adding the second one
$meta_query[] = array(
'key' => '_the_meta_key',
'value' => 'the_value_2',
'compare' => 'EXIST'
);
return $meta_query;
};
我有兩種產品:
the_value_2
the_value
因此,我期望這里有這兩種產品。 當我刪除第二個meta_query
我只得到產品B。
這是我的代碼中的完整解決方法:
add_action( 'woocommerce_product_query', 'mc_woocommerce_product_query_action', 10 );
function mc_woocommerce_product_query_action( $query ){
$meta_query = $query->get( 'meta_query' );
$tax_query = $query->get( 'tax_query' );
if( !empty( $_GET['rate_type'] ) ) {
$meta_query[] = array(
'key' => 'rate_type',
'value' => $_GET['rate_type'],
'compare' => '=', // <=== Here you can set other comparison arguments
);
}
if( !empty( $_GET['postcode'] ) ) {
$meta_query[] = array(
'key' => 'auth_postcode',
'value' => $_GET['postcode'],
'compare' => '=',
);
}
if ( !empty( $_GET['service_type'] && $_GET['service_type'] !== '-1' ) ) {
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => array( $_GET['service_type'] ),
// 'operator' => 'IN'
);
}
$query->set( 'meta_query', $meta_query );
$query->set( 'tax_query', $tax_query );
return $query;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.