Heim  >  Artikel  >  Backend-Entwicklung  >  Wie zeige ich den Bestandsstatus von Produktvariationen im WooCommerce-Dropdown an?

Wie zeige ich den Bestandsstatus von Produktvariationen im WooCommerce-Dropdown an?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 10:41:30373Durchsuche

How to Display Product Variation Stock Status in WooCommerce Dropdown?

Anzeigen des Lagerstatus von Produktvarianten im WooCommerce-Dropdown-Menü

Übersicht

Dieses Tutorial befasst sich mit der Notwendigkeit, den Lagerstatus (Auf Lager/Ausverkauft) anzuzeigen ) von Produktvarianten in der Dropdown-Liste auf der WooCommerce-Produktseite. Durch Modifizieren einer WooCommerce-Kernfunktion können wir die Bestandsstatusinformationen für jede Variante abrufen und neben den Variantenoptionen anzeigen.

Code-Implementierung

  1. Öffnen Sie die Datei „functions.php“ Ihres WordPress-Child-Themes Datei.
  2. Kopieren Sie die folgende geänderte Version der Funktion „wc_dropdown_variation_attribute_options“ und fügen Sie sie ein:
<code class="php">function wc_dropdown_variation_attribute_options( $args = array() ) {
    $args = wp_parse_args( apply_filters( 'woocommerce_dropdown_variation_attribute_options_args', $args ), array(
        'options'          => false,
        'attribute'        => false,
        'product'          => false,
        'selected'         => false,
        'name'             => '',
        'id'               => '',
        'class'            => '',
        'show_option_none' => __( 'Choose an option', 'woocommerce' ),
    ) );

    $options               = $args['options'];
    $product               = $args['product'];
    $attribute             = $args['attribute'];
    $name                  = $args['name'] ? $args['name'] : 'attribute_' . sanitize_title( $attribute );
    $id                    = $args['id'] ? $args['id'] : sanitize_title( $attribute );
    $class                 = $args['class'];
    $show_option_none      = $args['show_option_none'] ? true : false;
    $show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __( 'Choose an option', 'woocommerce' ); // We'll do our best to hide the placeholder, but we'll need to show something when resetting options.

    if ( empty( $options ) && ! empty( $product ) && ! empty( $attribute ) ) {
        $attributes = $product->get_variation_attributes();
        $options    = $attributes[ $attribute ];
    }

    $html = '';
    $html .= '' . esc_html( $show_option_none_text ) . '';

    if ( ! empty( $options ) ) {
        if ( $product && taxonomy_exists( $attribute ) ) {
            // Get terms if this is a taxonomy - ordered. We need the names too.
            $terms = wc_get_product_terms( $product->get_id(), $attribute, array( 'fields' => 'all' ) );

            foreach ( $terms as $term ) {
                if ( in_array( $term->slug, $options ) ) {
                    // Add the 'get_stock_status' function to retrieve and display the stock status
                    $stock_status = get_stock_status( $product, $attribute, $term->slug );
                    $html .= 'slug ) . '" ' . selected( sanitize_title( $args['selected'] ), $term->slug, false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $term->name ) ) . ' ' . $stock_status . ' ';
                }
            }
        } else {
            foreach ( $options as $option ) {
                // This handles lt 2.4.0 bw compatibility where text attributes were not sanitized.
                $selected = sanitize_title( $args['selected'] ) === $args['selected'] ? selected( $args['selected'], sanitize_title( $option ), false ) : selected( $args['selected'], $option, false );

                // Add the 'get_stock_status' function to retrieve and display the stock status
                $stock_status = get_stock_status( $product, $attribute, $option );
                $html .= '' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '  ' . $stock_status . ' ';
            }
        }
    }

    $html .= '';

    echo apply_filters( 'woocommerce_dropdown_variation_attribute_options_html', $html, $args );
}</code>
  1. Kopieren Sie die folgende Funktion und fügen Sie sie unter der geänderten Funktion „wc_dropdown_variation_attribute_options“ ein:
<code class="php">// Retrieve and display the stock status of a specific product variation
function get_stock_status( $product, $attribute, $term ) {
    foreach ( $product->get_available_variations() as $variation ) {
        if ( $variation['attributes'][$attribute] == $term ) {
            $stock = $variation['is_in_stock'] ? 'In Stock' : 'Out of Stock';
            break;
        }
    }
    return ' - (' . $stock . ')';
}</code>
  1. Hängen Sie die geänderte Funktion „wc_dropdown_variation_attribute_options“ an den Filter „woocommerce_dropdown_variation_attribute_options_html“ an:
<code class="php">add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'wc_dropdown_variation_attribute_options', 10, 2 );</code>
  1. Speichern Sie die Datei „functions.php“ und laden Sie sie hoch.

Hinweis: Dieser Code geht davon aus, dass Ihr Produkt nur ein Attribut für Variationen hat. Bei Produkten mit mehreren Attributen können einige Änderungen erforderlich sein, um den Lagerstatus in allen Fällen korrekt anzuzeigen.

Das obige ist der detaillierte Inhalt vonWie zeige ich den Bestandsstatus von Produktvariationen im WooCommerce-Dropdown an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn