2017-08-30 5 views
1

Je développe un widget personnalisé, je voudrais avoir un menu déroulant dans lequel je peux sélectionner l'une des 3 taxonomies personnalisées disponibles d'un type de poste personnalisé. Cette sélection doit fournir la taxonomie dans laquelle une seconde opération va lister - dans un autre menu déroulant - tous les termes de la taxonomie sélectionnée.Requête widget Wordpress à partir d'une variable dropdown

ce que je l'ai fait:

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

Qu'est-ce que je suis absent?

Répondre

0

Vous ne pouvez pas utiliser la logique conditionnelle sur un événement select en utilisant PHP. Soit vous avez besoin pour obtenir toutes les options sélectionner & et leur montrer sous condition (non préféré façon)

OU

Vous devez ajouter appel AJAX sur la première sélection de changement de boîte.

Suivre ceci:

/* 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(); 
      } 

Hope this aide. (Ceci est le code testé sur mon système) Merci.

+0

Je suis désolé, probablement je l'utilise dans le mauvais sens, mais avec votre solution, je peux simplement visualiser le premier menu déroulant –

+0

J'ai ajouté une alerte si cela se déclenche, vérifiez la console. Il devrait vous donner une réponse de boxe select. Si l'alerte ne tire pas plus que probablement, c'est un problème. –

+0

je peux réellement voir l'alerte, mais une fois que je clique sur "ok" je peux voir une erreur sur la console et aucun autre menu déroulant apparaît c'est ce que je peux voir: http://imgur.com/a/aK9Us –