Wie verstecke ich WooCommerce-Produkte mit einer bestimmten Kategorie basierend auf der Benutzerrolle?

Lesezeit: 5 Minuten

Wie verstecke ich WooCommerce Produkte mit einer bestimmten Kategorie basierend auf
Okomikeruko

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?

1647323347 600 Wie verstecke ich WooCommerce Produkte mit einer bestimmten Kategorie basierend auf
LoicTheAztec

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:

  • pre_get_posts all die Dinge!! Ich würde jedoch raten, dies nicht in Ihren Themen zu behalten functions.php und verschieben Sie es lieber in ein Plugin.

    – Helgathewikinger

    17. August 2016 um 22:53 Uhr


  • functions.php ist der einfachste Ort, um Snippets zum schnellen Testen abzulegen, aber ich rate immer, Ihr Design für anzeigebezogene Funktionen zu verwenden und funktionsspezifischen Code in Plugins beizubehalten.

    – Helgathewikinger

    17. August 2016 um 23:21 Uhr

  • Sie sollten dies nicht auf pre_get_posts ausführen, es sei denn, Sie möchten, dass dies für jede Abfrage ausgeführt wird. Der Woocommerce-Hook „woocommerce_product_query“ ermöglicht es Ihnen, ihn nur für Woocommerce-Abfragen auszuführen.

    – Nikolaus Koskowski

    17. August 2016 um 23:56 Uhr

  • @NicholasKoskowski Ich habe meiner Antwort eine Variante mit hinzugefügt woocommerce_product_query… Ihr Vorschlag ist interessant Möglichkeitals ob Sie in den WooCommerce-Kerncode verwandte Funktionen gehen, die sie auch verwenden pre_get_posts Haken und ähnliches… Danke trotzdem

    – LoicTheAztec

    18. August 2016 um 0:50 Uhr


  • @LoicTheAztec FYI, die erste Methode behindert den Admin-Bereich und versteckte alle Produkte vor dem Editor. Ich habe es in eine if-Anweisung verschachtelt: if (!in_array('administrator', $current_user->roles) { ... }

    – Okomikeruko

    23. August 2016 um 19:20 Uhr

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.

Wie verstecke ich WooCommerce Produkte mit einer bestimmten Kategorie basierend auf
pardeep

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' );

  • Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können

    – Nico Haase

    22. Juli 2020 um 13:41 Uhr

1004070cookie-checkWie verstecke ich WooCommerce-Produkte mit einer bestimmten Kategorie basierend auf der Benutzerrolle?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy