Запрос виджета Wordpress из раскрывающейся переменной

Я разрабатываю настраиваемый виджет, я хотел бы иметь раскрывающееся меню, в котором я могу выбрать одну из 3 доступных настраиваемых таксономий настраиваемого типа сообщения. Этот выбор должен предоставить таксономию, в которой вторая операция перечислит - в другом раскрывающемся меню - все термины выбранной таксономии.

вот что я сделал:

<div class="widget-option">
            <div class="widget-th">
                <label for="<?php echo esc_attr( $this->get_field_id( 'selezionato' ) ); ?>"><b><?php _e( 'Limit items', 'msd' ); ?></b></label> 
            </div>
            <div class="widget-td">
                <select id="<?php echo esc_attr( $this->get_field_id( 'selezionato' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'selezionato' ) ); ?>">
                    <option><?php _e( 'Seleziona la tipologia', 'msd' ); ?></option>
                    <option value="taxonomy_slug_1" <?php selected( $selezionato, "taxonomy_slug_1" ); ?>><?php _e( 'Taxonomy 1', 'msd' ); ?></option>
                    <option value="taxonomy_slug_2" <?php selected( $selezionato, "taxonomy_slug_2" ); ?>><?php _e( 'Taxonomy 2', 'msd' ); ?></option>
                    <option value="taxonomy_slug_3" <?php selected( $selezionato, "taxonomy_slug_3" ); ?>><?php _e( 'Taxonomy 3', 'msd' ); ?></option>
                </select>


                <select id="<?php echo esc_attr( $this->get_field_id( 'valori' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'valori' ) ); ?>">

                    <?php $cats = get_terms($instance['selezionato' ]);?>


                    <?php 

                    foreach($cats as $cat){ ?>   

                        <option value="<?php  echo $cat->slug; ?>" <?php selected( $instance['valori'], $cat->slug  ); ?>><?php _e( $cat->name,'msd' ); ?></option>

                    <?php } ?>

                </select>
                <p><?php _e( 'This field is optional', 'msd' ); ?></p>
            </div>
            <div class="clearfix"></div>
        </div>

Что мне не хватает?


person enrico tedoldi    schedule 30.08.2017    source источник


Ответы (1)


Вы не можете использовать условную логику для события выбора с помощью PHP. Либо вам нужно получить все опции select и показать их условно (не предпочтительный способ)

ИЛИ

Вам нужно добавить вызов AJAX при первом изменении поля выбора.

Следовать этому:

/* first select box */
<select id="select_d" name="<?php echo esc_attr( $this->get_field_name( 'selezionato' ) ); ?>">
            <option class="sd">select</option>
            <option value="taxonomy_slug_1">Taxonomy 1</option>/*use as same as you done above.*/
            <option value="taxonomy_slug_2">Taxonomy 2</option>
            <option value="taxonomy_slug_3">Taxonomy 3</option>
        </select>
        <div class="resresult"></div>

/*JQuery for getting taxonomy on change event*/
    <script type="text/javascript">

    jQuery('#select_d').on('change', function(){
        var tax = jQuery("#select_d").val();
        alert(tax)
        jQuery.ajax({
            url: myScript.ajax_url,
            type: "POST",
            data: {
                action: 'get_more_select',
                tax: tax,
            },
            success: function(response){
                 console.log(response)
                jQuery('.resresult').html(response);
            }
        });
    })
        </script>

    /*Enqueue your script (if not added)*/

add_action('wp_enqueue_scripts','ajaxlar_js_fn');
function ajaxlar_js_fn() {


            wp_enqueue_script( 'ajaxlar_js', plugins_url( '/js/custom.js', __FILE__ ), true);
             wp_localize_script('ajaxlar_js', 'myScript', array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            ));
        }

/*Finally get the result and return to blank div we had created after first select box*/
 add_action('wp_ajax_nopriv_more_posts', 'get_more_select');

            function get_more_select(){

               $tax =  $_POST['tax'];

               $terms = get_terms( array(
                'taxonomy' => $tax,
                'hide_empty' => false,
                ) );

               $html = "";
               $html .= "<select>";
               $html .= "<option>select</option>";
               foreach ($terms as $value) {
                    $html .= "<option value='".$value->slug."'>".$value->slug."</option>";
               }
               $html .= "</select>";

               return $html;

                exit(); 
            }

Надеюсь на эту помощь. (Это проверенный код в моей системе) Спасибо.

person Bilal Hussain    schedule 30.08.2017
comment
извините, возможно, я неправильно его использую, но с вашим решением я могу просто визуализировать первое выпадающее меню - person enrico tedoldi; 30.08.2017
comment
Я добавил предупреждение, если оно сработает, проверьте console. Он должен дать вам ответ в виде окна выбора. Если предупреждение не срабатывает, вероятно, это проблема js. - person Bilal Hussain; 30.08.2017
comment
На самом деле я вижу предупреждение, но как только я нажимаю "ОК", я вижу ошибку на консоли, и никакого другого раскрывающегося меню не появляется, вот что я вижу: imgur.com/a/aK9Us - person enrico tedoldi; 30.08.2017
comment
та же ошибка. Я все еще думаю, что делаю что-то не так, я вставил весь код, который вы разместили, в свой файл. Я как пробовал с полным кодом, так и комментируя wp_enqueue_scripts, думая, что это / * поставить ваш скрипт в очередь (если не добавлен) * / ссылается на скрипт выше. но ничего не изменилось - person enrico tedoldi; 30.08.2017
comment
add_action ('wp_enqueue_scripts', 'ajaxlar_js_fn'); эта функция на самом деле не работала. - person Bilal Hussain; 30.08.2017
comment
теперь эта ошибка: 'Uncaught ReferenceError: myScript is not defined', который относится к вашему URL-адресу: myScript.ajax_url, - person enrico tedoldi; 30.08.2017
comment
вставьте your_site_url.com/wp-admin/admin-ajax.php перед URL-адресом, например: 'your_site_url.com/wp-admin/ admin-ajax.php ' - person Bilal Hussain; 30.08.2017
comment
убедитесь, что вы заменили your_site_url на свой настоящий URL. Благодарность - person Bilal Hussain; 30.08.2017
comment
больше нет ошибок! теперь 0 (ноль) появляется сразу после раскрывающегося меню после того, как я нажимаю ОК в предупреждении! - person enrico tedoldi; 30.08.2017
comment
удалите предупреждение и поиграйте с кодом. убедитесь, что у вас есть термины в выбранной таксономии. - person Bilal Hussain; 30.08.2017
comment
Или добавь меня в чат, я дам тебе знать больше - person Bilal Hussain; 30.08.2017
comment
у меня недостаточно репутации, чтобы болтать ... все равно спасибо! я дам вам знать, если я разберусь! - person enrico tedoldi; 30.08.2017
comment
В любое время все, что я могу предложить, проверять модульное тестирование одно за другим. Также попробуйте print_r ($ _ POST); внутри get_more_select (); функция, чтобы убедиться, что вы получаете выбранную таксономию при изменении события. Спасибо - person Bilal Hussain; 30.08.2017