第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

基于 WooCommerce 中所選品牌的動(dòng)態(tài)選擇字段選項(xiàng)

基于 WooCommerce 中所選品牌的動(dòng)態(tài)選擇字段選項(xiàng)

PHP
心有法竹 2023-04-15 11:06:45
在 woocommerce 中,我有 2 個(gè)選擇字段:第一個(gè)是“汽車品牌”,第二個(gè)是這些的“汽車模型” Car Brands。我想做的是為所選的“汽車品牌”動(dòng)態(tài)獲取“汽車型號(hào)”“汽車品牌”來(lái)自 WooCommerce 產(chǎn)品屬性分類法。對(duì)于每個(gè)“汽車品牌”,相關(guān)的“汽車型號(hào)”是該產(chǎn)品屬性分類法的術(shù)語(yǔ)。這是“汽車品牌”(第一個(gè)選擇字段)的代碼:$attributes =  wc_get_attribute_taxonomies();if($attributes) {    echo '<select id="car-brands"><option value="noselection">Car Brand</option>';    foreach ( $attributes as $attribute ) {        echo '<option value="' . $attribute->attribute_name . '">' . $attribute->attribute_label . '</option>';    }    echo '</select>';}以及生成的 html 示例代碼:<select id="car-brands">    <option value="noselection">Car Brand</option>    <option value="toyota">TOYOTA</option>    <option value="lexus">LEXUS</option></select>然后是“汽車模型”的代碼(第二個(gè)選擇字段):$selected_attribute_name = 'toyota';$taxonomy = 'pa_' . $selected_attribute_name;$term_names = get_terms( array( 'taxonomy' => $taxonomy, 'fields' => 'names' ) );echo '<select id="car-models"><option value="noselection">Car Model</option>';echo '<option>' . implode( '</option><option>', $term_names ) . '</option>';echo '</select>';以及生成的 html 示例代碼:<select id="car-models">    <option value="noselection">Car Model</option>    <option value="toyota">AVENSIS</option>    <option value="lexus">CAMRY</option></select>如您所見(jiàn),我正在獲取“toyota”品牌的特定車型,因?yàn)槲乙褜ⅰ皌oyota”硬編碼為“Car brand”:$selected_attribute_name = 'toyota';所以我想要的是作為$selected_attribute_name一個(gè)動(dòng)態(tài)變量,所以當(dāng)用戶選擇汽車品牌“LEXUS”或“TOYOTA”時(shí),第二個(gè)選擇字段會(huì)動(dòng)態(tài)加載相關(guān)術(shù)語(yǔ)(選項(xiàng))。我發(fā)現(xiàn)了很多相關(guān)的線程,但我無(wú)法理解如何讓它適用于我的案例。如何讓動(dòng)態(tài)“汽車模型”根據(jù)所選汽車品牌選擇字段選項(xiàng)?
查看完整描述

2 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

下面使用Ajax從選中的“汽車品牌” (產(chǎn)品屬性分類法)中獲取對(duì)應(yīng)的terms ,動(dòng)態(tài)生成“car model”選擇字段選項(xiàng)(選中的產(chǎn)品屬性分類法的terms):


// Display 2 select fields (car brands and car models)

add_action( 'woocommerce_before_shop_loop', 'before_shop_loop_action_callback', 3 );

function before_shop_loop_action_callback() {

    if( $attributes =  wc_get_attribute_taxonomies() ) {


        ## 1st dropdown


        echo '<select id="car-brands" style="min-width:100px;"><option value="">' . __("Car Brand"). '</option>';


        // Loop through attribute taxonomies

        foreach ( $attributes as $attribute ) {

            echo '<option value="' . $attribute->attribute_name . '">' . $attribute->attribute_label . '</option>';

        }

        echo '</select>';


        ## 2nd dropdown


        echo '<select id="car-models" style="min-width:100px;"><option value=""> … </option></select>';

    }

}


// jQuery / Ajax (client side)

add_action( 'wp_footer', 'car_brand_selectors_script' );

function car_brand_selectors_script() {

    ?>

    <script type="text/javascript">

    jQuery(function( $ ) {

        if (typeof woocommerce_params === 'undefined')

            return false;


        var b = 'select#car-brands', // 1st field

            m = 'select#car-models', // 2nd field

            r = $(m).html(); // Original 2nd field select options


        function ajaxSendCarBrand( carBrand ) {

            $.ajax({

                url: woocommerce_params.ajax_url,

                type : 'POST',

                data : {

                    'action' : 'get_brand_terms',

                    'car_brand' : carBrand

                },

                success: function( response ) {

                    var options = $.parseJSON(response),

                        opt     = '';


                    if ( $.isEmptyObject(options) ) {

                        $(m).html(r);

                    } else {

                        $.each( options, function( key, value ){

                            opt += '<option value="'+key+'">'+value+'</option>';

                        });

                        $(m).html(opt);

                    }

                }

            });

        }


        // On change live event

        $( document.body ).on( 'change', b, function() {

            ajaxSendCarBrand($(this).val());

        });

    });

    </script>

    <?php

}


// WP AJAX HANDLER (Server side)

add_action('wp_ajax_get_brand_terms', 'get_car_brand_models');

add_action('wp_ajax_nopriv_get_brand_terms','get_car_brand_models');

function get_car_brand_models() {

    if( isset($_POST['car_brand']) ) {

        $brand    = wc_clean( $_POST['car_brand'] );

        $taxonomy = wc_attribute_taxonomy_name($brand);

        $options  = [];


        if( taxonomy_exists( $taxonomy ) ) {

            $terms   = get_terms( array( 'taxonomy' => $taxonomy ) );


            foreach( $terms as $term ){

                $options[$term->slug] = $term->name;

            }

        }

        echo json_encode( $options );

    }

    wp_die();

}

代碼進(jìn)入您的活動(dòng)子主題(或活動(dòng)主題)的 functions.php 文件。測(cè)試和工作。


查看完整回答
反對(duì) 回復(fù) 2023-04-15
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

在這里看一個(gè)有效的 ajax 示例。


Javascript 部分:


jQuery('#car-brands').change(function() {

    let carBrandName = jQuery(this).val();

    YourFunctionNameHere(carBrandName);

});


//function to execute

function YourFunctionNameHere(carBrandName) {

    //formdata variable consists of

    //action: this is ajax action name for WordPress which we define in PHP with a callback function with same name. See in PHP code part.

    //brandName: this is your custom post attributes name

    let formdata = "action=get_car_models&brandName="+carBrandName;

    jQuery.ajax({

        type: "POST",

        url: ajaxurl, // since WordPress version 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php

        data: formdata,

        cache: false,

        success: function(response, textStatus, jqXHR) {

            jQuery("#car-models").html(response);

        },

        error: function(jqXHR, textStatus, errorThrown) {

            //do stuff here in case of error

        }

    });

}

PHP部分:


 //here wp_ajax is the required prefix for your custom actions

 //first parameter is action name with wp_ajax prefix

 //second parameter is callback function to execute with same name as your action

 //for example if your action name is wp_ajax_get_car_models then your callback will be get_car_models

add_action( 'wp_ajax_get_car_models', 'get_car_models' );


function get_car_models() {

    global $wpdb; // this is how you get access to the database

//require_once any files here in which the below code is available or just write your code here.

    $selected_attribute_name = $_POST['brandName'];

    $taxonomy = 'pa_' . $selected_attribute_name;

    $term_names = get_terms( array( 'taxonomy' => $taxonomy, 'fields' => 'names' ) );

    $html = '';

    $html .= '<select id="car-models"><option value="noselection">Car Model</option>';

    $html .= '<option>' . implode( '</option><option>', $term_names ) . '</option>';

    $html .= '</select>';

    echo $html;

    wp_die(); // this is required to terminate immediately and return a proper response


}


查看完整回答
反對(duì) 回復(fù) 2023-04-15
  • 2 回答
  • 0 關(guān)注
  • 188 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)