首页 > 解决方案 > 动态填充的级联下拉错误

问题描述

我在网上找到了非常有用 的联系表格 7文章

<?php
function ajax_cf7_populate_values() {

        // read the CSV file in the $makes_models_years array

    $makes_models_years = array();
    $uploads_folder = wp_upload_dir()['basedir'];
    $file = fopen($uploads_folder.'\make_model_year.csv', 'r');

    $firstline = true;
    while (($line = fgetcsv($file)) !== FALSE) {
        if ($firstline) {
            $firstline = false;
            continue;
        }
        $makes_models_years[$line[0]][$line[1]][] = $line[2];

    }
    fclose($file);

        // setup the initial array that will be returned to the the client side script as a JSON object.

    $return_array = array(
            'makes' => array_keys($makes_models_years),
            'models' => array(),
            'years' => array(),
            'current_make' => false,
            'current_model' => false
        );

        // collect the posted values from the submitted form

    $make = key_exists('make', $_POST) ? $_POST['make'] : false;
    $model = key_exists('model', $_POST) ? $_POST['model'] : false;
    $year = key_exists('year', $_POST) ? $_POST['year'] : false;

        // populate the $return_array with the necessary values

    if ($make) {
        $return_array['current_make'] = $make;
        $return_array['models'] = array_keys($makes_models_years[$make]);
        if ($model) {
        $return_array['current_model'] = $model;
        $return_array['years'] = $makes_models_years[$make][$model];
        if ($year) {
                $return_array['current_year'] = $year;
            }
            }
        }

        // encode the $return_array as a JSON object and echo it
        
        echo json_encode($return_array);
        wp_die();

}

// These action hooks are needed to tell WordPress that the cf7_populate_values() function needs to be called
// if a script is POSTing the action : 'cf7_populate_values'

add_action( 'wp_ajax_cf7_populate_values', 'ajax_cf7_populate_values' );
add_action( 'wp_ajax_nopriv_cf7_populate_values', 'ajax_cf7_populate_values' );

和一些java

<script>
    (function($) {

        // create references to the 3 dropdown fields for later use.

        var $makes_dd = $('[name="makes"]');
        var $models_dd = $('[name="models"]');
        var $years_dd = $('[name="years"]');


        // run the populate_fields function, and additionally run it every time a value changes

        populate_fields();
        $('select').change(function() {
            populate_fields();
        });

        function populate_fields() {

            var data = {

                // action needs to match the action hook part after wp_ajax_nopriv_ and wp_ajax_ in the server side script.

                'action' : 'cf7_populate_values', 

                // pass all the currently selected values to the server side script.

                'make' : $makes_dd.val(),
                'model' : $models_dd.val(),
                'year' : $years_dd.val()
            };

            // call the server side script, and on completion, update all dropdown lists with the received values.

            $.post('/wp-admin/admin-ajax.php', data, function(response) {
                all_values = response;

                $makes_dd.html('').append($('<option>').text(' -- choose make -- '));
                $models_dd.html('').append($('<option>').text(' -- choose model  -- '));
                $years_dd.html('').append($('<option>').text(' -- choose year -- '));

                $.each(all_values.makes, function() {
                    $option = $("<option>").text(this).val(this);
                    if (all_values.current_make == this) {
                        $option.attr('selected','selected');
                    }
                    $makes_dd.append($option);
                });
                $.each(all_values.models, function() {
                    $option = $("<option>").text(this).val(this);
                    if (all_values.current_model == this) {
                        $option.attr('selected','selected');
                    }
                    $models_dd.append($option);
                });
                $.each(all_values.years, function() {
                    $option = $("<option>").text(this).val(this);
                    if (all_values.current_year == this) {
                        $option.attr('selected','selected');
                    }
                    $years_dd.append($option);
                });
            },'json');
        }

    })( jQuery );
</script>

但是当我将它添加到我的网站时,下拉菜单中没有任何内容。他们是空的。我试图联系博主,但还没有答案。给我一些建议,我几乎像帖子中的那样复制了 csv。所以我认为这个功能是错误的......某处

标签: wordpress

解决方案


我找到了解决方案:在文章中文件名是错误的。它必须是“make_model_year.csv”!!!


推荐阅读