Support » WooCommerce » Nur bestimmte Kategorien auf Shopseite anzeigen

  • whiskyviking

    (@whiskyviking)


    Hallo zusammen!

    Ich habe mehrere Kategorien erstellt um das Produkt-Kategorien Widget als Filtermöflichkeit für meine Produkte zu nutzen.

    Nun werden aber alle Kategorien auf meiner Shop Startseite angezeigt. Das möchte ich so aber nicht.
    Auf meiner Suche nach einer Lösung bin ich auf folgendes Snippet gestoßen:

    // only show specific shop categories
    add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
     function get_subcategory_terms( $terms, $taxonomies, $args ) {
     $new_terms = array();
     
    if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() ) {
     foreach ( $terms as $key => $term ) {
     
    if ( in_array( $term->slug, array( 'whisky-spirituosen','glencairn-crystal-produkte','fassdeckel','whiskyfaesser','spirituosen-veredelung','single-cask-smoke','whiskymemorabilia-merchandise','pflanzkuebel-gartenmoebel-aus-whiskyfaessern','cask-design','deckel-dauben-hoops'  ) ) ) {
     $new_terms[] = $term;
     }
     }
     $terms = $new_terms;
     }
     return $terms;
     }

    Das funktioniert soweit ganz gut. Allerdings hat es auch zur Folge, dass bei den Produkten die Produktvarianten nicht mehr angezigt werden.

    Ich habe auch einige Lösungen gesehen um Kategorien auszublenden, aber da ich plane in Zukunft immer mehr Kategorien für den Filter zu erstellen, erscheint mir das ls sehr umständlich. Mir wäre eine Lösung lieber, die permanent nur die gewünschten Kategorien anzeigt.

    Hat jemand eine Lösung oder vieleicht einen anderen Weg?

    Danke im Voraus!

    Moderationshinweis: Bitte Code-Formatierung im Beitragseditor des Forums nutzen! Danke. 🙂

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Moderator Bego Mario Garde

    (@pixolin)

    Thread-Ersteller whiskyviking

    (@whiskyviking)

    Hallo,
    danke für deine schnelle Antwort!

    Aber das funktioniert nicht, oder wahrscheinlich bin ich zu unwissend dafür (bin Anfänger).

    Ich verstehe das Snippet unter dem Link so, dass dann Produkte aus einem bestimmten Katogorie Typ angezeigt werden. Ich weiß aber nicht wie man Kategorie Typen zuweist.

    Mein Problem ist aber das ich nur bestimmte Kategorien auf der Shop Startseite haben möchte.

    Gibt es vielleicht nicht sogar ein plugin dafür?

    Moderator Bego Mario Garde

    (@pixolin)

    Hast du denn mal danach gesucht?

    OK, ich aber. Wie wäre es mit

    https://wordpress.org/plugins/hide-categories-on-shop-page/

    aranjo

    (@aranjo)

    Ich habe die gleiche Frage und dieses Plugin soeben getestet, es blendet nur die Kategorie aus, aber auf der Start-Shopseite werden trotzdem alle Produkte angezeigt.

    Moderator Bego Mario Garde

    (@pixolin)

    Dann passt das Plugin offensichtlich nicht.
    Hast du nach einer Alternative gesucht?

    Thread-Ersteller whiskyviking

    (@whiskyviking)

    Ich abe jetzt alle Plugins die ich dazu finden konnte, inklusive den vorgeschlagenen, ohne Erfolg getestet.

    Das Einzige was wirklich super funktioniert ist das von mir oben gepostete Snippet. Dafür entsteht dann aber das Problem mit den Produktvarianten.

    Ich habe absolut keine Ahnung wie man Codes richtig schreibt. Aber ich vermute es hat etwas mit dem Filtern der sub_categories zu tun. Kann der Filter nicht so umgeschrieben werden, dass er nur die Hauptkategorien filtert?

    Moderator Bego Mario Garde

    (@pixolin)

    Ich war mit dem Code aus der Antwort bei Stack-Exchange gut zurecht gekommen. Wenn du damit nichts anfangen kannst und „absolut keine Ahnung [hast] wie man Codes richtig schreibt“, solltest du bitte einen Dienstleister beauftragen.

    Wir bieten dir hier bei Anwendungsfragen Hilfe zur Selbsthilfe, können aber nicht auf Zuruf Anwendungen programmieren, weil es den zeitlichen Rahmen eines ehrenamtlichen Engagements sprengt.

    Thread-Ersteller whiskyviking

    (@whiskyviking)

    Das habe ich auch nicht erwartet. Die Frage war ob das so möglich wäre.

    Der Stack-Exchange Code hat mir in sofern nicht geholfen, da ich nicht weiß wie man den einzelnen Kategorien einen bestimmten Type zuordnet.

    Moderator Bego Mario Garde

    (@pixolin)

    Die Frage war ob das so möglich wäre.

    Das habe ich dir mit meiner ersten Antwort bereits geschrieben.

    Der Stack-Exchange Code hat mir in sofern nicht geholfen, da ich nicht weiß wie man den einzelnen Kategorien einen bestimmten Type zuordnet.

    Was meinst du mit „einen bestimmten Type zuordnen“?

    Schauen wir uns den Code nochmal an:

     add_action('pre_get_posts','shop_filter_cat');
    
     function shop_filter_cat($query) {
        if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
           $query->set('tax_query', array(
                        array ('taxonomy' => 'product_cat',
                                           'field' => 'slug',
                                            'terms' => 'type-1'
                                     )
                         )
           );   
        }
     }
    
    

    Quelle: Stack Exchange

    Die erste Zeile bedeutet soviel wie „bevor eine Abfrage der Beiträge/Seiten/Produkte gemacht wird, berücksichtige bitte meine Funktion“:

    add_action('pre_get_posts','shop_filter_cat');

    Die 1. Zeile der Funktion shop_filter_cat fragt ab, was angezeigt wird und verändert die Abfrage nur unter bestimmten Bedingungen:
    if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {

    • du bist also nicht im Backend (! is_admin())
    • es wird eine Beitragsübersichtsseite der Produkte angezeigt (is_post_type_archive( 'product' ))
    • die Haupt-Abfrage wird angezeigt ($query->is_main_query())

    Nur wenn diese drei Bedingungen erfüllt sind, wird der Code ausgeführt.

    Der Befehl $query->set() bedeutet, dass die Abfrage verändert wird.

    'tax_query', array(
      array ('taxonomy' => 'product_cat',
      'field' => 'slug',
      'terms' => 'type-1'
     )
    )

    bedeutet, dass in der Taxonomie (den Suchkriterien) nach dem Suchkriterim „Produkt-Kategorie“ gesucht wird. In den Kategorien wird die Titelform („slug“) der Kategorie ausgelesen. Gesucht ist die Kategorie type-1 – da könnte auch hosen oder t-shirts stehen, wenn du „Hosen“ uns „T-Shirts“ als Produktkategorie angelegt hast.

    Möchtest du also auf der Produktübersichtsseite nur Produkte aus den Kategorien Hosen und T-Shirts ausgeben, würde der Code so aussehen:

    add_action('pre_get_posts','shop_filter_cat');
    
    function shop_filter_cat($query) {
      if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
      $query->set( 'tax_query', array(
        'relation' => 'AND',
        array (
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => 'hosen' // Slug der Kategorie "Hosen"
           ),
        array (
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => 'T-Shirts' // Slug der Kategorie "T-Shirts"
           ),
         ),
       );   
      }
    }

    Wenn du nicht programmieren kannst, möchtest aber eine Seite erstellen, auf der die Kategorien „Hose“ und „T-Shirts“ vorkommt, kannst du entweder einen WooCommerce-Block „Produkte nach Kategorie“ einfügen oder einen Shortcode:

    [product_category category="hose, t-shirt" per_page="8" columns="3" orderby="date" order="desc"]

    aranjo

    (@aranjo)

    Darf ich mich hier nochmals einhängen:

    Ich habe obigen Code verwendet und den im Childtheme in die function.php eingefügt: Erster Code ist ein anderer und hat bisher so funktioniert. Wenn ich den unteren 2. Code (aus diesem thread) einfüge, kommt die Fehlermeldung:

    Es gab einen kritischen Fehler auf Ihrer Website.

    <?php
    
    // Add custom Theme Functions here
    /**
     * Entfernen Sie die generierte Produktschema-Markierung von den Seiten Produktkategorie und Shop
     */
    function wc_remove_product_schema_product_archive() {
    	remove_action( 'woocommerce_shop_loop', array( WC()->structured_data, 'generate_product_data' ), 10, 0 );
    }
    add_action( 'woocommerce_init', 'wc_remove_product_schema_product_archive' );
    add_filter( 'woocommerce_currencies', 'add_my_currency' );
    
    function add_my_currency( $currencies ) {
        $currencies['CHF/m2'] = __( 'Schweizer Franken (mit Abstand)', 'woocommerce' );
        return $currencies;
    }
    
    add_filter('woocommerce_currency_symbol', 'add_my_currency_symbol', 10, 2);
    function add_my_currency_symbol( $currency_symbol, $currency ) {
         switch( $currency ) {
              case 'CHF': $currency_symbol = 'CHF/m2&nbsp;';
              break;
         }
         return $currency_symbol;
    
    }
    
    <strong>add_action('pre_get_posts','shop_filter_cat');
    
    function shop_filter_cat($query) {
      if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
      $query->set( 'tax_query', array(
        'relation' => 'AND',
        array (
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => 'parkett' // Slug der Kategorie "Hosen"
           ),
        array (
           'taxonomy' => 'product_cat',
           'field' => 'slug',
           'terms' => 'Parkett' // Slug der Kategorie "T-Shirts"
           ),
         ),
       );   
      }
    
    Moderator Bego Mario Garde

    (@pixolin)

    Da ist wohl was reingerutscht: <strong>add_action(…

    aranjo

    (@aranjo)

    ah nein das habe ich hier fett markiert, um den besagten Codeteil hervorzuheben

    Moderator Bego Mario Garde

    (@pixolin)

    Dann fehlt eine schließende Klammer } am Ende.

Ansicht von 13 Antworten - 1 bis 13 (von insgesamt 13)
  • Das Thema „Nur bestimmte Kategorien auf Shopseite anzeigen“ ist für neue Antworten geschlossen.