是的,這是可能的。有兩種方法:
1)與pre_get_posts
在創建查詢變量對象之後但在運行實際查詢之前調用的wordpress掛鉤。所以對於這種情況非常適合。我們在這裏想象一下,'Wholesale'
類別的ID是'123'
。
下面是自定義代碼:
function wholeseller_role_cat($query) {
// Get the current user
$current_user = wp_get_current_user();
if ($query->is_main_query()) {
// Displaying only "Wholesale" category products to "whole seller" user role
if (in_array('wholeseller', $current_user->roles)) {
// Set here the ID for Wholesale category
$query->set('cat', '123');
// Displaying All products (except "Wholesale" category products)
// to all other users roles (except "wholeseller" user role)
// and to non logged user.
} else {
// Set here the ID for Wholesale category (with minus sign before)
$query->set('cat', '-123'); // negative number
}
}
}
add_action('pre_get_posts', 'wholeseller_role_cat');
這一代碼進入你的活動的子主題或主題,或自定義插件更好的function.php文件。
2)同woocommerce_product_query
WooCommerce鉤。 (我們在這裏還是想象一下,'Wholesale'
類別的ID是'123'
)。
下面是自定義代碼:
function wholeseller_role_cat($q) {
// Get the current user
$current_user = wp_get_current_user();
// Displaying only "Wholesale" category products to "whole seller" user role
if (in_array('wholeseller', $current_user->roles)) {
// Set here the ID for Wholesale category
$q->set('tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => '123', // your category ID
)
));
// Displaying All products (except "Wholesale" category products)
// to all other users roles (except "wholeseller" user role)
// and to non logged user.
} else {
// Set here the ID for Wholesale category
$q->set('tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => '123', // your category ID
'operator' => 'NOT IN'
)
));
}
}
add_action('woocommerce_product_query', 'wholeseller_role_cat');
這一代碼進入你的活動的子主題或主題,或自定義插件更好的function.php文件。
如果你要使用的類別塞代替類別ID,你將不得不與部分替代(都是數組):
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'wholesale', // your category slug (to use the slug see below)
,如果你願意,你需要你可以添加,some woocommerce conditionals tags在if statements
甚至更多地限制。
參考文獻:
'pre_get_posts'所有的東西!雖然我會建議不要將它保留在主題的'functions.php'中,而應將其移入插件中。 – helgatheviking
'functions.php'是最簡單的放置快速測試片段的地方,但我總是建議使用您的主題來顯示相關的功能,並在插件中保留任何功能特定的代碼。 – helgatheviking
您不應該在pre_get_posts上運行此操作,除非您希望在每個查詢中運行此操作。 Woocommerce鉤子「woocommerce_product_query」將允許您僅在woocommerce查詢中運行它。 –