Hello guys I’m working on implementing bootstrap carousel in my WordPress project. I’m using checkboxes to list my categories it looks something like this:
I would like for users to be able to change content of my carousel based on categories they choose.
Basically I need to change my query based on which checkboxes user has choosen. My query needs to change based on what categories user has choosen for example something like this ‘category_name’ => ‘test1, test2’
This is my code:
<div class="col-md-7 col-md-offset-4 main-content">
<div class="checkbox">
<label class="checkbox-inline">
<input type="checkbox" name="allRadios" id="allRadios" value="all">
all
</label>
<label class="checkbox-inline">
<input type="checkbox" name="frontendRadios" id="frontendRadios" value="frontend" checked>
front end
</label>
<label class="checkbox-inline">
<input type="checkbox" name="wordpressRadios" id="wordpressRadios" value="wordpress" checked>
wordpress
</label>
<label class="checkbox-inline">
<input type="checkbox" name="designRadios" id="designRadios" value="design" checked>
design
</label>
<label class="checkbox-inline">
<input type="checkbox" name="seoRadios" id="seoRadios" value="seo" checked>
seo
</label>
</div>
</div>
<!-- Here starts carousel loop -->
<?php $carauselLoop = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => -1, 'category_name' => 'testing' ) ); ?>
<?php $i=1; ?>
<div class="col-md-4 our-work-info">
<div class="clients-num">
<h5 title="01">01</h5>
</div>
<span class="glyphicon glyphicon-link"></span>
<h3>Crossroads</h3>
<h4 class="sub-heading">front end / wordpress</h4>
</div>
<div class="col-md-7">
<div id="our-work-carousel" class="carousel slide" data-ride="carousel">
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<?php while ( $carauselLoop->have_posts() ) : $carauselLoop->the_post(); ?>
<div class="item <?php if ($i == 1) echo 'active'; ?>">
<img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>" alt="<?php the_title(); ?>">
<div class="carousel-caption">
<a href="<?php the_permalink() ?>"><h3><?php the_title(); ?></h3></a>
</div>
</div>
<?php $i++; ?>
<?php endwhile; wp_reset_query(); ?>
</div>
<!-- Indicators -->
<ol class="carousel-indicators our-work-indicators">
<li data-target="#our-work-carousel" data-slide-to="0" class="active"></li>
<li data-target="#our-work-carousel" data-slide-to="1"></li>
<li data-target="#our-work-carousel" data-slide-to="2"></li>
</ol>
<!-- Controls -->
<a class="left carousel-control" href="#our-work-carousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#our-work-carousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
Is there a way to achieve this and how should I approach it ?
2
Answers
I've decided to take a different approach in solving this. My idea was to load all posts from different categories and give them CSS classes which I would then show or not show based on which checkboxes user selected.
This is my HTML:
This is my JQ:
If anyone runs into similar issue I hope this will help him.
Doing this in PHP means doing page reloads for every checkbox click and this is generally not what you want. You’re wasting a lot of user’s time and putting a needless load on your server. That being said, what you want to do is expose a custom query parameter that you then pass along to the function querying the posts.
So you’d add something like this to
functions.php
:Then wherever you run the query you first fetch the query param from the URL:
And pass that to your query:
For the checkboxes’ values make sure to output the category IDs. Also, don’t hardcode them, but loop through categories:
And you will still need some kind of JS logic that will listen for
onchange
events on the inputs, and set correct URL e.g.http://yoursite.tld/?carousel_cat=12
.