Filtru Ajax pentru categorii
Știu că este o solicitare mare pentru voi, dar nu reușesc să-mi dau seama cum să rezolv.
Am găsit această pagină: http://www.bobz.co/ajax-filter-posts-tag/#comment-28112
Aceasta arată cum să creezi un filtru dinamic pentru etichetele articolelor.
Am vrut să-l modific pentru categoriile de articole, dar nu reușesc să-l fac să funcționeze.
Am pus acest cod în functions.php
function ajax_filter_posts_scripts() {
// Înregistrare script
wp_register_script('afp_script', get_stylesheet_directory_uri() . '/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' ), // Crează nonce pe care îl vom folosi mai târziu pentru a verifica cererea AJAX
'afp_ajax_url' => admin_url( 'admin-ajax.php' ),
)
);
}
add_action('wp_enqueue_scripts', 'ajax_filter_posts_scripts', 100);
// Script pentru obținerea articolelor
function ajax_filter_get_posts( $taxonomy ) {
// Verifică nonce
if( !isset( $_POST['afp_nonce'] ) || !wp_verify_nonce( $_POST['afp_nonce'], 'afp_nonce' ) )
die('Permisiune refuzată');
$taxonomy = $_POST['taxonomy'];
// WP Query
$args = array(
'category_name' => $taxonomy,
'post_type' => 'post',
'posts_per_page' => 10,
);
// Dacă taxonomia nu este setată, elimină cheia din array și obține toate articolele
if( !$taxonomy ) {
unset( $args['category_name'] );
}
$query = new WP_Query( $args );
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php else: ?>
<h2>Nu s-au găsit articole</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');
și apoi în șablonul paginii mele am pus acest cod:
//în fișierul șablon
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
);
$query = new WP_Query( $args );
function tags_filter() {
$tax = 'category';
$terms = get_terms( $tax );
$count = count( $terms );
if ( $count > 0 ): ?>
<div class="post-tags">
<?php
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, $tax );
echo '<a href="' . $term_link . '" class="tax-filter" title="' . $term->slug . '">' . $term->name . '</a> ';
} ?>
</div>
<?php endif;
}
Când încarc șablonul paginii mele, site-ul îmi încarcă conținutul și afișează butoanele pentru filtrarea categoriilor, dar când fac clic pe oricare dintre butoane, returnează "Nu s-au găsit articole".
Acest lucru mă face să cred că am făcut ceva greșit în fișierul functions, dar nu-mi dau seama ce anume.
Poate vedea cineva ce am făcut greșit aici?
Nu știu dacă ai rezolvat deja sau nu, dar eu căutam o modalitate de a încorpora acest lucru într-o pagină și de a filtra postările după categorie.
Am reușit să fac asta să funcționeze astfel încât să afișeze toate categoriile și postările aferente. Pune asta în functions.php
function ajax_filter_posts_scripts() {
// Încarcă scriptul
wp_register_script('afp_script', get_template_directory_uri() . '/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' ), // Crează un nonce pe care îl vom folosi mai târziu pentru a verifica cererea AJAX
'afp_ajax_url' => admin_url( 'admin-ajax.php' ),
)
);
}
add_action('wp_enqueue_scripts', 'ajax_filter_posts_scripts', 100);
// Script pentru obținerea postărilor
function ajax_filter_get_posts( $taxonomy ) {
// Verifică nonce-ul
if( !isset( $_POST['afp_nonce'] ) || !wp_verify_nonce( $_POST['afp_nonce'], 'afp_nonce' ) )
die('Permisiune refuzată');
$taxonomy = $_POST['taxonomy'];
// Interogare WP
$args = array(
'category_name' => $taxonomy,
'post_type' => 'post',
'posts_per_page' => 10,
);
echo $taxonomy;
// Dacă taxonomia nu este setată, elimină cheia din array și obține toate postările
if( !$taxonomy ) {
unset( $args['tag'] );
}
$query = new WP_Query( $args );
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php else: ?>
<h2>Nu s-au găsit postări</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');
Apoi, adaugă asta în template-ul tău de pagină:
<?php $args = array(
'post_type' => 'post',
'posts_per_page' => 10,
);
$query = new WP_Query( $args );
$tax = 'category';
$terms = get_terms( $tax );
$count = count( $terms );
if ( $count > 0 ): ?>
<div class="post-tags">
<?php
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, $tax );
echo '<a href="' . $term_link . '" class="tax-filter" title="' . $term->slug . '">' . $term->name . '</a> ';
} ?>
</div>
<?php endif;
if ( $query->have_posts() ): ?>
<div class="tagged-posts">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php endwhile; ?>
</div>
<?php else: ?>
<div class="tagged-posts">
<h2>Nu s-au găsit postări</h2>
</div>
<?php endif; ?>
Sper că te ajută să rezolvi problemele tale!
