Filtrowanie WP_Query za pomocą formularza i stronicowanie
-
Witam,
Muszę zrobić filtrowanie swojego WP_Query wg termów taksonomii i niestety mam problem ze stronicowaniem wyników.
Do stronicowania używam wtyczki wp simple pagination.
Problem polega na tym, że dobrze pobiera wybrane taksonomie, i tworzy mi listę postów tylko z wybranych kilku kategorii, ale linki stronicowania prowadzą do złej strony, i nie potrafię w nich przepisać wartości wybranych kategorii, bo niestety link do następnej strony albo prowadzi do 404, albo do archiwum postów z wszystkich kategorii.
Post type = partnerzy, taksonomia = branza
Da się obejść bez javascriptu zeby stronicowanie dzialalo tak jak powinno czyli zeby w wynikach pokazywalo kolejne strony wybranych kilku kategorii.
Taki mam kod:
<?php $taxes = array(); if (isset($_POST['terms'])) { $taxes = $_POST['terms']; } ?> <div class="filter-container"> <form action="" method="post" class="filters-form"> <?php $terms = get_terms('branza',array('hide_empty'=>true)); ?> <?php foreach ($terms as $term): $name = $term->name; $slug = $term->slug; $id = $term->term_id; ?> <span class="thefield"> <input type="checkbox" name="terms[]" id="term-<?php echo $id; ?>" value="<?php echo $slug; ?>" <?php if (in_array($slug,$taxes)) {echo 'checked="checked"';} ?> > <label for="term-<?php echo $id; ?>"> <?php echo $name ?> </label> </span> <?php endforeach ?> <div class="filter-buttons"> <input class="ico-reset filter-reset" type="reset" value="Wyczyść" /> <input class="ico-submit filter-submit" type="submit" value="Filtruj" /> </div> </form> </div> <div class="query-results"> <?php echo $paged; if (sizeof($taxes) == 0) { $taxes = false; } $args = array(); if ($taxes) { $args = array( 'posts_per_page' => 2, 'post_type' => 'partnerzy', 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'branza', 'field' => 'slug', 'terms' => $taxes ), ), 'paged'=> $paged ); } else { $args = array( 'posts_per_page' => 2, 'post_type' => 'partnerzy', 'paged'=> $paged ); } $temp = $wp_query; $wp_query = new WP_Query($args); ?> <?php if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <?php $www = get_field('www'); ?> <article id="post-<?php the_ID();?>" <?php post_class('partnerzy-item'); ?> > <?php if (has_post_thumbnail()): ?> <div class="archive-thumb"> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('partner-thumb'); ?></a> </div> <?php endif; ?> <h2 class="archive-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <div class="archive-content"> <?php the_excerpt(); ?> </div> <div class="archive-more clearfix"> <?php if (!empty($www)): ?> <a href="<?php echo $www; ?>" class="ico-link"><?php _e('strona www','medivite'); ?></a> <?php endif; ?> <a href="<?php the_permalink(); ?>" class="read-more"><?php _e('Czytaj dalej','medivite'); ?></a> </div> </article> <?php endwhile; ?> <div class="clearfix"></div> <?php if (function_exists('wp_simple_pagination')): ?> <?php wp_simple_pagination(); ?> <?php endif ?> <?php else: ?> <h2><?php _e('Brak partnerów','medivite'); ?></h2> <p><?php _e('Niestety w tej branży jeszcze nie ma partnerów. Chcesz dołączyć?','medivite'); ?></p> <?php endif; ?> <?php wp_reset_postdata(); ?> <?php $wp_query = null; $wp_query = $temp; unset($temp);?> </div>Wcinam się w zmienna $wp_query po to żeby w ogóle wtyczka stronicowania działała.
Formularz działa metodą POST. Wolałbym GET, ale niestety nie potrafię zrobić ładnego linku, i tworzy się kod typu …?terms=3&terms=6&terms=8, a wolalbym wtedy ?terms=3,6,8
Jak to zrobic? Wtedy i stronicowanie łatwo by bylo dopisac do linkow stronicowania poprzez JS.
Calosc wyglada tak http://scr.hu/5oi/mlmm8 🙂
Temat ‘Filtrowanie WP_Query za pomocą formularza i stronicowanie’ jest zamknięty na nowe odpowiedzi.