यदि कई मान उपलब्ध हैं, तो कोमा ने उत्पाद विशेषता शर्तों को अलग कर दिया है

Jan 13 2021

WooCommerce में, मैं वर्तमान में एक फ़ंक्शन का निर्माण कर रहा हूं जो दुकान पृष्ठ में कुछ उत्पाद विशेषताओं को प्रतिध्वनित करेगा। अगर कई गुण मान उपलब्ध हैं, तो मैं उन्हें अल्पविराम से अलग करना चाहूंगा, लेकिन मुझे नहीं पता कि कैसे।

मेरा कोड:

add_action('woocommerce_after_shop_loop_item_title', 'TitleVariations', 10);
function TitleVariations()
{
global $product; $colormonth = $product->get_attribute('color-month'); $finish = $product->get_attribute('finish'); $design = $product->get_attribute('design'); echo '<span class="variation-display">'; echo __($colormonth, 'woocommerce');
echo __($finish, 'woocommerce'); echo __($crossdesign, 'woocommerce');
echo '</span>';
}

जवाब

2 LoicTheAztec Jan 13 2021 at 22:50

WC_Product विधि get_attribute()एक से अधिक मान होने पर मानों को अलग-अलग स्ट्रिंग देता है ... आपको यह भी जांचने की आवश्यकता है कि प्रत्येक अलग विशेषता के पास एक शब्द है ...

उत्पाद विशेषता लेबल नाम प्राप्त करने के लिए, यो wc_attribute_label()उत्पाद विशेषता फ़ंक्शन का उपयोग कर सकते हैं ।

1)। यदि आप प्रत्येक उत्पाद विशेषता को लेबल नाम और पद (एस) मान (प्रत्येक पंक्ति में प्रत्येक अलग विशेषता) के साथ प्राप्त करना चाहते हैं, तो आप इसके बजाय निम्नलिखित का उपयोग करेंगे।

यह कोड संभाल भी कस्टम उत्पाद विशेषताएँ :

add_action('woocommerce_after_shop_loop_item_title', 'display_loop_product_attributtes', 10);
function display_loop_product_attributtes()
{
    global $product; // Here define your product attribute names (slugs) $attribute_names = array('color-month', 'finish', 'design'); 
    $attributes = array(); // Initializing // Loop Through product attributes array foreach( $attribute_names as $attribute_name ) { if( taxonomy_exists( 'pa_' . $attribute_name )  ) {
            $attribute = 'pa_' . $attribute_name; // Custom taxonomy
        } else {
            $attribute = $attribute_name; // Custom attribute (not a taxonomy)
        }

        $values_str = $product->get_attribute($attribute); if ( $values_str ) {
            $attributes[] = '<strong>' . wc_attribute_label($attribute) . ':</strong> ' . $values_str; } } // Output product attribute label / values pairs (one by line) if( ! empty( $attributes ) ) { 
        echo '<span class="variation-display">' . implode( '<br>', $attributes ) . '</span>';
    }
}

२)। लेकिन अगर आप अपने सभी उत्पाद विशेषताओं को अल्पविराम से अलग किए गए स्ट्रिंग के रूप में प्राप्त करना चाहते हैं, तो आपका कोड कुछ ऐसा होगा जैसे कि Woocommerce संग्रह पृष्ठों में उत्पाद शीर्षक के तहत प्रदर्शन विशिष्ट उत्पाद विशेषताओं में

तो आपके कोड के लिए:

add_action('woocommerce_after_shop_loop_item_title', 'display_loop_product_attributtes', 10);
function display_loop_product_attributtes()
{
    global $product;
        
    $color_month = $product->get_attribute('color-month');
    $finish = $product->get_attribute('finish');
    $design = $product->get_attribute('design');

    $attributes = array(); // Initializing if ( $color_month ) {
        $attributes[] = $color_month;
    }
    if (  $finish ) { $attributes[] = $finish; } if ( $design ) {
        $attributes[] = $design;
    }

    // Output product attribute values
    if( ! empty( $attributes ) ) { echo '<span class="variation-display">' . implode( ', ', $attributes ) . '</span>';
    }
}

कोड सक्रिय चाइल्ड थीम (या सक्रिय थीम) की फ़ंक्शन.php फ़ाइल में जाता है। यह काम करना चाहिए।

3 u_mulder Jan 13 2021 at 22:14

अपने मान को सरणी में और फिर implodeइस सरणी में जमा करें :

$values = [ __($colormonth, 'woocommerce'),
    __($finish, 'woocommerce'), __($crossdesign, 'woocommerce'),
];

// if some values returned by `__()` are empty strings, 
// you can filter your array so as to remove them
$values = array_filter($values);

echo '<span class="variation-display">';
echo implode(', ', $values);
echo '</span>';