Maison > développement back-end > tutoriel php > Comment afficher l'état du stock de variation de produit dans la liste déroulante WooCommerce ?

Comment afficher l'état du stock de variation de produit dans la liste déroulante WooCommerce ?

Linda Hamilton
Libérer: 2024-11-01 10:41:30
original
438 Les gens l'ont consulté

How to Display Product Variation Stock Status in WooCommerce Dropdown?

Affichage de l'état du stock des variantes du produit dans la liste déroulante WooCommerce

Aperçu

Ce tutoriel répond à la nécessité d'afficher l'état du stock (En stock/En rupture de stock ) des variantes de produits dans la liste déroulante de la page produit WooCommerce. En modifiant une fonction principale de WooCommerce, nous pouvons récupérer les informations sur l'état du stock pour chaque variation et les afficher à côté des options de variation.

Implémentation du code

  1. Ouvrez les fonctions.php de votre thème enfant WordPress. fichier.
  2. Copiez et collez la version modifiée suivante de la fonction wc_dropdown_variation_attribute_options :
<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>
Copier après la connexion
  1. Copiez et collez la fonction suivante sous la fonction wc_dropdown_variation_attribute_options modifiée :
<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>
Copier après la connexion
  1. Accrochez la fonction wc_dropdown_variation_attribute_options modifiée au filtre woocommerce_dropdown_variation_attribute_options_html :
<code class="php">add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'wc_dropdown_variation_attribute_options', 10, 2 );</code>
Copier après la connexion
  1. Enregistrez et téléchargez le fichier function.php.

Remarque : Ce code suppose que votre produit n'a qu'un seul attribut pour les variantes. Pour les produits possédant plusieurs attributs, certaines modifications peuvent être nécessaires pour afficher correctement l'état du stock dans tous les cas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal