2017-08-30 20 views
1

我正在开发一个自定义小部件,我想有一个下拉菜单,我可以选择其中一个自定义帖子类型的3 availabe自定义分类法。 该选择应提供第二个操作将在另一个下拉菜单中列出所选分类的所有术语的分类。从一个下拉变量的Wordpress小部件查询

这是我做了什么:

<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> 

我在想什么?

回答

0

您不能在使用PHP的select事件上使用条件逻辑。要么你需要得到所有选择&选项,并告诉他们有条件(不推荐使用的方式)

OR

您需要在第一个选择框中更改添加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(); 
      } 

希望这有助于。 (这是在我的系统上测试的代码) 谢谢。

+0

对不起,可能我是以错误的方式使用它,但对于您的解决方案,我可以直观地看到第一个下拉菜单 –

+0

如果发生火灾,我已经添加了警报,请检查控制台。它应该给你选择框的回应。如果警报不是可能触发,这是js问题。 –

+0

我实际上可以看到警报,但是一旦我点击“确定”,我可以在控制台上看到一个错误,并且没有其他下拉菜单出现 这是我可以看到的:http://imgur.com/a/aK9Us –