根据 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 文件。 它应该工作。