Ich habe einen Kunden mit folgendem Problem:
Ich muss in der Lage sein, ihre WooCommerce-WordPress-Site in im Wesentlichen zwei Kategorien aufzuteilen. Wenn ein Benutzer angemeldet ist als "Wholeseller"
nur Produkte in der "Wholesale"
Kategorie aus der Datenbank gezogen werden.
Wenn der Benutzer jedoch nicht angemeldet ist oder angemeldet ist, aber nicht a "Wholeseller"
dann nur Produkte ohne die "Wholesale"
Kategorie aus der Datenbank gezogen werden.
Ich denke, ich werde so etwas zu den Themen hinzufügen functions.php
Datei:
add_filter("some_woocommerce_hook", "wholeseller_filter");
function wholeseller_filter() {
if (current_user->role == "Wholeseller"){
//omit products without "wholesale" category while browsing whole site
} else {
//omit products with "wholesale" in the category while browsing whole site.
}
}
Ich habe mich in StackOverflow umgesehen, aber ich habe nicht gefunden, wonach ich suche, oder weiß nicht genau, welche Schlüsselwörter ich für meine Suche verwenden sollte.
Können Sie mich in die richtige Richtung weisen?
Ja, es ist möglich. Es gibt 2 Möglichkeiten:
1) Mit dem pre_get_posts
WordPress-Hook, der aufgerufen wird, nachdem das Abfragevariablenobjekt erstellt wurde, aber bevor die eigentliche Abfrage ausgeführt wird. Also perfekt für diesen Fall. Das stellen wir uns hier vor die ID von 'Wholesale'
Kategorie ist '123'
.
Hier ist der benutzerdefinierte Code:
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' );
Dieser Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs oder Designs oder besser in ein benutzerdefiniertes Plugin eingefügt.
2) Mit dem woocommerce_product_query
WooCommerce-Hook. (Wir stellen uns hier immer noch vor, dass die ID von 'Wholesale'
Kategorie ist '123'
).
Hier ist der benutzerdefinierte Code:
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' );
Dieser Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs oder Designs oder besser in ein benutzerdefiniertes Plugin eingefügt.
Wenn Sie den Kategorie-Slug anstelle der Kategorie-ID verwenden möchten, müssen Sie teilweise (beide Arrays) ersetzen durch:
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'wholesale', // your category slug (to use the slug see below)
Sie können hinzufügen, wenn Sie möchten und brauchen, einige Woocommerce-Bedingungs-Tags in dem if statements
um dies noch weiter einzuschränken.
Verweise:
Um dies leistungsfähiger zu machen und nur an der Woocommerce-Abfrage zu arbeiten, verwenden Sie die folgende Funktion und den folgenden Hook.
function exclude_product_from_wholesale( $q ){
$current_user = wp_get_current_user();
$ARRAY_OF_PRODUCT_IDS_YOU_WANT_HIDDEN = array();
if ( in_array( 'wholeseller', $current_user->roles ) ) {
$q->set( 'post__not_in', $ARRAY_OF_PRODUCT_IDS_YOU_WANT_HIDDEN );
}
}
add_action( 'woocommerce_product_query', 'exclude_product_from_wholesale' );
Sie können diese einfache Funktion in Ihre functions.php einfügen.
function exclude_categories_for_vendors( $query ) {
// Get the current user
$current_user = wp_get_current_user();
$ARRAY_OF_PRODUCT_CATEGORIES_IDS_YOU_WANT_HIDDEN = array(26,23,20);
if( is_user_logged_in() ){
if ( $query->is_main_query() ) {
if ( in_array( 'editor', (array) $current_user->roles ) ) {
//echo "editor";
//below query will hide categories for Vendor user in Admin Panel
$query->set( 'tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $ARRAY_OF_PRODUCT_CATEGORIES_IDS_YOU_WANT_HIDDEN, // your category ID
'operator' => 'NOT IN'
)
) );
} else{
//no changes
}
}
}
}
add_action( 'pre_get_posts', 'exclude_categories_for_vendors' );