最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php - Woocommerce - if selected attribute term equals

programmeradmin1浏览0评论

I have created an attribute "color" with two terms "black" and "white" and i want to show something when selected term equals to white.

I've tried the following code (based on ) but it seems that it just checks if there is available term "white" and if there is then shows something. I want to show something only when the term "white" is selected

$terms = get_the_terms( $product->id, 'pa_color');
 foreach($terms as $term){
 if($term->name == 'white'){
     echo 'something';
 }
}

Thanks in advance.

I have created an attribute "color" with two terms "black" and "white" and i want to show something when selected term equals to white.

I've tried the following code (based on https://stackoverflow/a/23622917/10183871) but it seems that it just checks if there is available term "white" and if there is then shows something. I want to show something only when the term "white" is selected

$terms = get_the_terms( $product->id, 'pa_color');
 foreach($terms as $term){
 if($term->name == 'white'){
     echo 'something';
 }
}

Thanks in advance.

Share Improve this question edited Oct 9, 2019 at 11:01 Billy asked Oct 9, 2019 at 10:14 BillyBilly 573 silver badges13 bronze badges 6
  • what is name of attribute ? white or White ? – Chetan Vaghela Commented Oct 9, 2019 at 10:50
  • I have an attribute "color" with "white" and "black" terms/values. – Billy Commented Oct 9, 2019 at 10:53
  • i mean, you are comparing term name with attribute name or slug ? – Chetan Vaghela Commented Oct 9, 2019 at 10:57
  • Let me explain it better. I created a product attribute "color" and i have two terms "black" and "white". When a user selects "white" for product i want to echo something. – Billy Commented Oct 9, 2019 at 11:00
  • term name is case sensitive. try with if($term->slug == 'white') or if($term->name == 'White') try with slug or capital W. – Chetan Vaghela Commented Oct 9, 2019 at 11:10
 |  Show 1 more comment

1 Answer 1

Reset to default 0

I have modified code of https://stackoverflow/a/54722971/10183871 which you have provided. i have made some changes according your requirement. you can take reference below code and make changes as per your requirement. i have tested code and it is working for me https://prnt.sc/pgwwvq.

// Set the defined product attribute taxonomy
function vendor_defined_taxonomy() {
    // The targeted product attribute taxonomy
    return 'pa_color'; 
}

// Display the vendors on product meta
add_action( 'woocommerce_product_meta_end', 'display_product_vendors', 10 );
function display_product_vendors() {
    $taxonomy = vendor_defined_taxonomy();
    $term_ids = wp_get_post_terms( get_the_ID(), $taxonomy, array('fields' => 'ids') );
    if( sizeof($term_ids) > 0 ){ 
        echo '<span class="posted_in vendors"></span>';
    }
}

// Display the selected variation vendor in a hidden imput field
add_filter( 'woocommerce_available_variation', 'selected_variation_vendor_value', 10, 3 );
function selected_variation_vendor_value( $data, $product, $variation ) {
    $taxonomy = vendor_defined_taxonomy();

    if( isset($data['attributes']['attribute_'.$taxonomy]) )
        $term = get_term_by( 'slug', $data['attributes']['attribute_'.$taxonomy], $taxonomy );

    if( isset($term) && is_a($term, 'WP_Term' ) )
        $data['variation_description'] .= '<input type="hidden" name="vendor-hidden" id="vendor-hidden" value="'.$term->name.'">';

    return $data;
}

// Replace the vendors on product meta by the selected variation vendor
add_action('woocommerce_after_variations_form', 'custom_product_jquery_script');
function custom_product_jquery_script() {
    global $product;

    $taxonomy     = vendor_defined_taxonomy();
    $terms_string = $product->get_attribute($taxonomy);

    if( ! empty($terms_string) ) :
    ?>
    <script type="text/javascript">
    jQuery(function($) {
        var form = 'form.variations_form',       selected = 'input[name="variation_id"]',
            vendorVal = 'input#vendor-hidden',   vendorTarget = 'span.vendors',
            vendorHtml = $(vendorTarget).text(), vendorLabel = '';

        // On variation select
        $(form).on( 'blur', 'select', function() {
            if($(selected).val() != ''){
                $(vendorTarget).text("");
                if($(vendorVal).val() == 'White'){
                    //$(vendorTarget).text(vendorLabel+' '+$(vendorVal).val());
                    $(vendorTarget).text("here is your text");
                }
            } 
        });
    });
    </script>
    <?php
    endif;
}

change text from $(vendorTarget).text("here is your text"); which you want to display. if($(vendorVal).val() == 'White') change color attribute name as per your requirement. let me know if this helps to you.

发布评论

评论列表(0)

  1. 暂无评论