优化Wooccommerce功能,只在特定角色中显示特定产品



我有以下功能,它在目录页面上运行,并根据用户的角色向用户显示或隐藏特定的产品。如果用户是客户,那么他可以看到检查了set_catalog_visibility(ACF(的产品。

问题是这个功能正在减慢我的目录,我需要对它进行优化,这样它会运行得更快。

add_action('pre_get_posts', function( $query ){
$user = wp_get_current_user();
if ( $query->is_main_query() && is_woocommerce()) {
if (!check_user_role(array('customer','administrator')) || !is_user_logged_in() ) {
$product_ids = get_post_ids_by_meta_key_and_value('prd_clients', 1);
foreach($product_ids as $id){
// Get an instance of the product
$product = wc_get_product($id);
// Change the product visibility
$product->set_catalog_visibility('hidden');
// Save and sync the product visibility
$product->save();
}
}
else{
$product_ids = get_post_ids_by_meta_key_and_value('prd_clients', 1);
foreach($product_ids as $id){
// Get an instance of the product
$product = wc_get_product($id);
// Change the product visibility
$product->set_catalog_visibility('visible');
// Save and sync the product visibility
$product->save();
}
}

}

});

你可以简单地这样做:

add_action(
'pre_get_posts',
function( $query ) {
if ( $query->is_main_query() && is_woocommerce() ) {
if ( ! is_user_logged_in() && ( is_user_logged_in() && ! check_user_role( array( 'customer', 'administrator' ) ) ) ) {
$product_ids = get_post_ids_by_meta_key_and_value( 'prd_clients', 1 );
if ( ! empty( $product_ids ) ) {
$query->set( 'post__not_in', $product_ids );
}
}
}
}
);

最新更新