Página front Page

  1. <h3>Filtro de productos</h3>
  2.                           <select name="categorias-productos" id="categorias-productos">
  3.                                 <option value="">Todas las categorías</option>
  4.                                   <?php
  5.                                     $terms = get_terms('product_cat', array('hide_empty' => true));
  6.                                     foreach($terms as $term){
  7.                                     echo  '<option value="'. $term->slug . '"> '. $term->name. '</option>';
  8.                                     }
  9.                                   ?>
  10.                           </select>
  11.                           <div id="resultado-productos">
  12.                           </div>

Dentro de functions.php

  1. add_action('wp_enqueue_scripts','template_styles');
  2. function template_styles(){
  3.     wp_enqueue_script('custom',get_template_directory_uri() .'/js/custom.js', false,'1.1', true);
  4.     wp_localize_script('custom', 'wdm',array(
  5.         'ajaxurl' => admin_url('admin-ajax.php')
  6.     ));
  7. }
  8.  
  9. add_action("wp_ajax_nopriv_wdmFiltroProductos", "wdmFiltroProductos");
  10. add_action("wp_ajax_wdmFiltroProductos", "wdmFiltroProductos");
  11. function wdmFiltroProductos(){
  12.                     $args = array(
  13.                         'post_type' =>'product',
  14.                         'posts_per_page' => -1,
  15.                         'order' => 'ASC',
  16.                         'order_by' =>'title'
  17.                         );
  18.                         if($_POST['product_cat']){
  19.                         $args['tax_query'] = array(
  20.                                 array(
  21.                                     'taxonomy' =>'product_cat',
  22.                                     'field' =>'slug',
  23.                                     'terms' => $_POST['product_cat']
  24.                                     )
  25.                             );
  26.                         }
  27.                     $productos = new WP_Query($args);
  28.                     if($productos->have_posts()){
  29.                         $return = array();
  30.                         while($productos->have_posts()){
  31.                             $productos->the_post();
  32.                             $return[] = array(
  33.                                 'imagen' => get_the_post_thumbnail(get_the_id(),'large'),
  34.                                 'link' => get_the_permalink(),
  35.                                 'title' => get_the_title()
  36.                                 );
  37.                         }
  38.                         wp_send_json($return);
  39.                     }
  40. }

Archivo custom.js

javascript

  1. (function($){
  2.     $("#categorias-productos").change(function(){
  3.        
  4.         $.ajax({
  5.             url: wdm.ajaxurl,
  6.             method:"POST",
  7.             data: {
  8.                 "action": "wdmFiltroProductos" ,
  9.                 "product_cat": $(this).find(':selected').val()
  10.             },
  11.             beforeSend: function(){
  12.                 $("#resultado-productos").html("Cargando...")    
  13.             },
  14.             success: function(data){
  15.                // console.log(data)
  16.                let html = "";
  17.                data.forEach(item => {
  18.                html += `<li style="width:30%; display:inline-block; margin-right:10px;"><figure>${item.imagen}</figure>
  19.                <h4><a href="${item.link}">${item.title}</a></h4></li>`
  20.                })
  21.                $("#resultado-productos").html(html);
  22.             },
  23.             error: function(error){
  24.                 console.log(error)
  25.             }
  26.            
  27.         });
  28.        
  29.     });
  30. })(jQuery);
Comparte conocimiento en tus redes sociales...Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Email this to someone
email
Pin on Pinterest
Pinterest
Share on Tumblr
Tumblr
Print this page
Print