WordPress

Filtruj posty według kategorii ajax pokazuje wszystkie posty

  • 15 marca, 2017
  • 3 min read
Filtruj posty według kategorii ajax pokazuje wszystkie posty


próbuję filtrować posty według kaskadowych rozwijanych kategorii. Ale kiedy wybieram opcję kaskady, pokazuje wszystkie posty. Jak mogę filtrować TYLKO posty według wybranej opcji?

To jest moja struktura:

Funkcje.php

    function ajax_filter_posts_scripts() {
  // Enqueue script
  wp_register_script('afp_script', get_template_directory_uri() . '/assets/js/ajax-filter-posts.js', false, null, false);
  wp_enqueue_script('afp_script');

  wp_localize_script( 'afp_script', 'afp_vars', array(
        'afp_nonce' => wp_create_nonce( 'afp_nonce' ), // Create nonce which we later will use to verify AJAX request
        'afp_ajax_url' => admin_url( 'admin-ajax.php' ),
      )
  );
}
add_action('wp_enqueue_scripts', 'ajax_filter_posts_scripts', 100);

// Script for getting posts
function ajax_filter_get_posts( $taxonomy ) {

  // Verify nonce
  if( !isset( $_POST['afp_nonce'] ) || !wp_verify_nonce( $_POST['afp_nonce'], 'afp_nonce' ) )
    die('Permission denied');

  $taxonomy = $_POST['taxonomy'];

  // WP Query
    $args = array(
    'exclude' => '1,2,4,5,7,8,9,10,11,12',
    'post_type' => 'post',
    'nopaging' => true, // show all posts in one go
    );
  echo $taxonomy;
  // If taxonomy is not set, remove key from array and get all posts
  if( !$taxonomy ) {
    unset( $args['tag'] );
  }

  $query = new WP_Query( $args );

  if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
      <div class="col-md-4">
        <div class="img-thumb">
            <a href=" the_field("link_do_case'); ?>">
                <?php the_post_thumbnail(); ?>      
            </a>                                                                    
        </div>
        <small><?php the_title(); ?></small>
    </div>

  <?php endwhile; ?>
  <?php else: ?>
    <h2>Case não encontrado</h2>
  <?php endif;

  die();
}

add_action('wp_ajax_filter_posts', 'ajax_filter_get_posts');
add_action('wp_ajax_nopriv_filter_posts', 'ajax_filter_get_posts');

To jest mój skrypt

jQuery(document).ready(function(jQuery) {
    jQuery('.post-tags select').on('change', function(event) {
        console.log('mudou');
        // Prevent default action - opening tag page
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }

        // Get tag slug from title attirbute
        var selecetd_taxonomy = jQuery(this).attr('title');

        // After user click on tag, fade out list of posts
        jQuery('.tagged-posts').fadeOut();

        data = {
            action: 'filter_posts', // function to execute
            afp_nonce: afp_vars.afp_nonce, // wp_nonce
            taxonomy: selecetd_taxonomy, // selected tag
            };

        jQuery.post( afp_vars.afp_ajax_url, data, function(response) {

            if( response ) {
                // Display posts on page
                jQuery('.tagged-posts').html( response );
                // Restore div visibility
                jQuery('.tagged-posts').fadeIn();
            };
        });
    });
});

A to jest moja strona strukturalna

<div id="ajax-cases">
<?php
    // WP Query
    $args = array(
    'post_type' => 'post',
    'exclude' => '1,2,4,5,7,8,9,10,11',
    'post_status' => 'publish',
    'nopaging' => true, // show all posts in one go
    );
   $query = new WP_Query( $args );
   $tax = 'category';
   $terms = get_terms( $tax, $args);
   $count = count( $terms );

    if ( $count > 0 ): ?>
        <div class="post-tags">
            <h2>Busque pelo tipo de Trabalho</h2>
            <?php
            echo '<select>';
                foreach ( $terms as $term ) {
                    $term_link = get_term_link( $term, $tax ); 
                    echo '<option value="' . $term_link . '" class="tax-filter">' . $term->name . '</option> ';

                }
            echo '</select>';
             ?>
        </div>
    <?php endif ;?>
    <div class="tagged-posts">
      // here must be show the posts selected trough the category option
    </div>              


Źródło

Warto przeczytać!  formularze — Jak zezwolić określonym rozszerzeniom i rozmiarowi pliku na załącznik wp_mail?