• Vielleicht kann mir da jemand helfen.

    Wie wird der Code korrekt aufgebaut?

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

    function display_attribute_on_shop_page() {

        global $product;

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'versandkosten';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Versandkosten: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

     }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'abholung';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Abholung: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'bett-matratzengroesse';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Bett / Matratzen Grösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'bh-groesse';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>BH Grösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'kleidergroesse-damen';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Kleidergrösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'kleidergroesse-herren';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Kleidergrösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'kleidergroesse-kinder-baby

    ';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Kleidergrösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'kleidergroesse-teenager';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Kleidergrösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'pc-monitor';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Grösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'schuhgroesse';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Grösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

        // Überprüfen, ob das Produkt einfach ist

        if ( $product->is_type( 'simple' ) ) {

            $attribute_name = 'tv-groesse';

            $attribute_values = $product->get_attribute( $attribute_name );

            // Wenn das Attribut einen Wert hat, wird es ausgegeben

            if ( ! empty( $attribute_values ) ) {

                echo '<div class="shop-product-attribute">';

                echo '<strong>Grösse: </strong>' . $attribute_values;

                echo '</div>';

            }

        }

    }
Ansicht von 5 Antworten – 1 bis 5 (von insgesamt 5)
  • Moderator threadi

    (@threadi)

    Wenn ich das richtig sehe, willst du zu einfachen Produkten zusätzliche Angaben ausgeben, die als Eigenschaften an den Produkten gespeichert sind? Also „versandkosten“, „abholung“, „bett-matratzengroesse“ etc.

    Syntaktisch ist der Code so nicht richtig. Du versuchst für jede Eigenschaft den gleichen WooCommerce-Hook mehrfach zu verwenden – hast aber die dazugehörige Funktion nur 1 Mal definiert. Dabei müsstest du, wenn du so vorgehst, eine Funktion für jede Eigenschaft definieren. Hier mal als Beispiel für die ersten 2 Eigenschaften:

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page_versandkosten', 5 );

    function display_attribute_on_shop_page_versandkosten() {

    global $product;

    // Überprüfen, ob das Produkt einfach ist

    if ( $product->is_type( 'simple' ) ) {

    $attribute_name = 'versandkosten';

    $attribute_values = $product->get_attribute( $attribute_name );

    // Wenn das Attribut einen Wert hat, wird es ausgegeben

    if ( ! empty( $attribute_values ) ) {

    echo '<div class="shop-product-attribute">';

    echo '<strong>Versandkosten: </strong>' . $attribute_values;

    echo '</div>';

    }

    }

    }

    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page_abholung', 5 );

    function display_attribute_on_shop_page_abholung() {
    global $product;

    // Überprüfen, ob das Produkt einfach ist
    if ( $product->is_type( 'simple' ) ) {

    $attribute_name = 'abholung';

    $attribute_values = $product->get_attribute( $attribute_name );

    // Wenn das Attribut einen Wert hat, wird es ausgegeben

    if ( ! empty( $attribute_values ) ) {

    echo '<div class="shop-product-attribute">';

    echo '<strong>Abholung: </strong>' . $attribute_values;

    echo '</div>';

    }

    }
    }

    Das müsstest du genau so für alle anderen Eigenschaften adaptieren.

    Ein modernerer Weg wäre, nur eine einzelne Funktion zu verwenden und in dieser in einer Schleife durch alle Eigenschaften zu gehen. Das habe ich eben mal schnell wie folgt umgesetzt (Komplettlösung, aber ungetestet):

    /**
    * Zeige pro einfachem Produkt zusätzliche Eigenschaften an.
    *
    * @return void
    */
    function display_attribute_on_shop_page(): void {
    global $product;

    // Überprüfen, ob das Produkt einfach ist.
    if ( $product->is_type( 'simple' ) ) {

    foreach( display_attribute_on_shop_page_eigenschaften() as $attribute_name => $titel ) {
    // Hole den Wert des Attributs.
    $attribute_values = $product->get_attribute( $attribute_name );

    // Wenn das Attribut einen Wert hat, wird es ausgegeben.
    if ( ! empty( $attribute_values ) ) {
    echo '<div class="shop-product-attribute">';
    echo '<strong>' . esc_html( $titel ) . ': </strong>' . esc_html( $attribute_values );
    echo '</div>';
    }
    }
    }
    }
    add_action( 'woocommerce_after_shop_loop_item_title', 'display_attribute_on_shop_page', 5 );

    /**
    * Rückgabe der Liste der anzuzeigenden Eigenschaften eines Produktes.
    *
    * Aufbau:
    * Name => Titel
    *
    * @return array<string,string>
    */
    function display_attribute_on_shop_page_eigenschaften(): array {
    return array(
    'versandkosten' => 'Versandkosten',
    'abholung' => 'Abholung',
    'bett-matratzengroesse' => 'Bett-Matratzengroesse',
    'bh-groesse' => 'BH Grösse',
    'kleidergroesse-damen' => 'Kleidergrösse',
    'kleidergroesse-herren' => 'Kleidergrösse',
    'kleidergroesse-kinder-baby' => 'Kleidergrösse',
    'kleidergroesse-teenager' => 'Kleidergrosse',
    'pc-monitor' => 'Grösse',
    'schuhgroesse' => 'Grösse',
    'tv-groesse' => 'Grösse'
    );
    }

    Wenn du eine weitere Eigenschaft ergänzen willst, musst du diese nur in display_attribute_on_shop_page_eigenschaften() zur Liste ergänzen.

    Hinweis: Dein Code entspricht nicht den WordPress Coding Standards. Insbesondere sicherst du Ausgaben nicht mit Escaping ab. Details dazu hier im englischen Handbuch: https://developer.wordpress.org/apis/security/escaping/ – auch wenn du das nur für dich selbst schreibst, sich an gewisse Regeln hierbei zu halten, sichert dein Projekt gegen potentielle Fehler oder gar Angriffe ab.

    Und ich dachte immer, in diesem Forum geht es um die Anwendung von WordPress. Programmierungen sollten doch hier nicht besprochen werden, oder sehe ich das falsch?

    Moderator Support Moderator

    (@moderator)

    @bscu Wenn du Fragen zur Moderation in den Foren von wordpress.org hast, wende dich wie geschrieben an forum-moderation@wordpress.org oder den genannten Slack Channel.

    Moderator La Geek

    (@la-geek)

    Hallo @bscu

    Und ich dachte immer, in diesem Forum geht es um die Anwendung von WordPress. Programmierungen sollten doch hier nicht besprochen werden, oder sehe ich das falsch?

    Ich kann deine Verwunderung darüber nachvollziehen. Das haben wir lange so gehandhabt (nur Andwendungsfragen), zu den Zeiten als Bego, Hans-Gerd und ich hier moderierten. Seit @threadi Moderator ist und Bego nicht mehr, wurden die bisherigen Richtlinien aufgehoben. Threadi hatte sich dafür ausgesprochen, da es in den int. Guidelines keine entsprechenden Klauseln gibt.

    Kurzum: Diese Fragen sind seitdem erlaubt: CSS-Code, Programmiersprachen.

    Thread-Starter grafikhouse

    (@grafikhouse)

    @threadi

    Das hat soweit gut geklappt es wird auf der Einzelprodukteseite angezeigt nun habe ich nur noch das Problem auf der Archivseite dort wird es nicht angezeigt hast du da vielleicht auch eine Lösung?

Ansicht von 5 Antworten – 1 bis 5 (von insgesamt 5)

Du musst angemeldet sein, um auf dieses Thema zu antworten.