根据 Woocommerce 中的用户动态产品属性值过滤产品循环
Filter product loop based on user dynamic product attribute value in Woocommerce
如何修改 WooCommerce 的主循环以根据登录用户的 ACF 字段进行过滤?我使用 ACF 在用户配置文件中添加了一个新字段,它从产品属性(车辆年份)中提取了一个 select 列表。我想让产品只根据用户选择的车辆年份显示给用户。我无法弄清楚如何修改循环,因此无论客户查看哪个 WooCommerce 页面,它都将被过滤以仅显示其属性与用户个人资料中的车辆年份 select 相匹配的产品。
我将以下代码添加到 archive-products.php 页面以检查登录用户。如果你有更好的主意,我愿意。
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
$user = new WP_User(get_current_user_id());
$uid = $user->ID;
$year = get_field("vehicle-year", "user_$uid");
echo $year->name;
}
这帮助我确认我可以根据登录的用户获取 ACF 字段。
我知道我需要类似这样的东西,我只是不确定如何让它 replace/attach 到主 WooCommerce 循环,所以它总是过滤产品。
'tax_query' => array(
'relation'=>'AND',
array(
'taxonomy' => 'pa_year-2',
'field' => 'name',
'terms' => '1970'
)
)
感谢您提供的任何帮助。
使用这个专用的 WooCommerce 挂钩尝试以下操作:
add_filter('woocommerce_product_query_tax_query', 'custom_product_query_tax_query', 20, 2 );
function custom_product_query_tax_query( $tax_query, $query ) {
// Only on front end for logged in users
if( is_admin() || ! is_user_logged_in() ) return $tax_query;
// HERE get and Define the product attribute term name (from user data) to be used
$term = get_field( "vehicle-year", 'user_' . get_current_user_id() ); // Get the year (term)
$terms = array( $term->name );
// The taxonomy for your product attribute
$taxonomy = 'pa_year-2';
$tax_query['relation'] = 'AND'; // Not really necessary as it's defined by default
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'name', // 'term_id', 'slug' or 'name'
'terms' => $terms,
);
return $tax_query;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。 它应该工作。
如何修改 WooCommerce 的主循环以根据登录用户的 ACF 字段进行过滤?我使用 ACF 在用户配置文件中添加了一个新字段,它从产品属性(车辆年份)中提取了一个 select 列表。我想让产品只根据用户选择的车辆年份显示给用户。我无法弄清楚如何修改循环,因此无论客户查看哪个 WooCommerce 页面,它都将被过滤以仅显示其属性与用户个人资料中的车辆年份 select 相匹配的产品。
我将以下代码添加到 archive-products.php 页面以检查登录用户。如果你有更好的主意,我愿意。
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
$user = new WP_User(get_current_user_id());
$uid = $user->ID;
$year = get_field("vehicle-year", "user_$uid");
echo $year->name;
}
这帮助我确认我可以根据登录的用户获取 ACF 字段。
我知道我需要类似这样的东西,我只是不确定如何让它 replace/attach 到主 WooCommerce 循环,所以它总是过滤产品。
'tax_query' => array(
'relation'=>'AND',
array(
'taxonomy' => 'pa_year-2',
'field' => 'name',
'terms' => '1970'
)
)
感谢您提供的任何帮助。
使用这个专用的 WooCommerce 挂钩尝试以下操作:
add_filter('woocommerce_product_query_tax_query', 'custom_product_query_tax_query', 20, 2 );
function custom_product_query_tax_query( $tax_query, $query ) {
// Only on front end for logged in users
if( is_admin() || ! is_user_logged_in() ) return $tax_query;
// HERE get and Define the product attribute term name (from user data) to be used
$term = get_field( "vehicle-year", 'user_' . get_current_user_id() ); // Get the year (term)
$terms = array( $term->name );
// The taxonomy for your product attribute
$taxonomy = 'pa_year-2';
$tax_query['relation'] = 'AND'; // Not really necessary as it's defined by default
$tax_query[] = array(
'taxonomy' => $taxonomy,
'field' => 'name', // 'term_id', 'slug' or 'name'
'terms' => $terms,
);
return $tax_query;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。 它应该工作。