Get_the_terms - display all post types
Assuming we have custom post type called portfolio
and custom taxonomy called portfolio_category
<?php $post_type = 'portfolio';$post_taxonomy = 'portfolio_category';//First get all terms of portfolio_category.$terms = get_terms( $post_taxonomy );$portfolio = new WP_Query('post_type='.$post_type.'&post_per_page=-1'); ?>// First we loop our porfolio_category to show all categories as filter.<ul id="filters" class="whitetext whitelink myeluft"> <li><a href="#" data-filter="*" class="selected">All</a></li> <?php foreach($terms as $term) : ?> <li><a href='#' data-filter='.<?php echo $term->slug ?>'><?php echo $term->name ?></a></li> <?php endforeach; ?></ul><?php if ( $portfolio->have_posts() ) : ?> <div id="isotope-list"> <?php while ( $portfolio->have_posts() ) : $portfolio->the_post();// Get current post terms. $item_terms = wp_get_post_terms( get_the_ID(), $post_taxonomy, $args ); $classes = ''; // Append classes to use with each item. foreach($item_terms as $item_term ){ $classes .= $item_term->slug.' '; } ?> <div class="<?php echo $classes; ?> item col-md-3"> <h3><?php the_title(); ?></h3> <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?> </div> <!-- end item --> <?php endwhile; ?> </div> <!-- end isotope-list --> <?php endif; ?>
The problem has been solved.
I finally used the following code:
<ul id="filters" class="whitetext whitelink myeluft"> <a href="#" data-filter="*" class="selected"><li class="smoothtrans">Alle</li></a> <a href='#' data-filter='.foto'><li class="smoothtrans">Foto</li></a> <a href='#' data-filter='.video'><li class="smoothtrans">Video</li></a> <a href='#' data-filter='.web'><li class="smoothtrans">Web</li></a></ul><?php$terms = get_terms( $post_taxonomy );$args = array( 'post_type' => 'any', 'posts_per_page' => 6, 'post_taxonomy' => 'any',);$the_query = new WP_Query($args); // Loop post_type?><?php if ( $the_query->have_posts() ) : ?> <div id="isotope-list"> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); $termsArray = get_the_terms( $post->ID, "category"); //Get the terms for this particular item $termsString = ""; //initialize the string that will contain the terms foreach ( $termsArray as $term ) { // for each term $termsString .= $term->slug.' '; //create a string that has all the slugs } ?> <div class="<?php echo $termsString; ?> item col-md-4"> <ul class="grid cs-style-3"> <li> <figure> <?php // 'item' is used as an identifier (see Setp 5, line 6) ?> <?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?> <figcaption class="lefttext"> <h3><?php the_title(); ?></h3> <span class="offgrey"><?php echo(types_render_field( "produkt", array( 'raw' => true) )); ?> / <?php echo(types_render_field( "produsert", array( 'raw' => true) )); ?></span> <a href="<?php the_permalink() ?>" rel="bookmark" class="smoothtrans">Se prosjekt</a> </figcaption> </figure> </li> </ul> </div> <!-- end item --> <?php endwhile; ?> </div> <!-- end isotope-list --> <script src="<?php bloginfo('stylesheet_directory'); ?>/js/toucheffects.js"></script><?php endif; ?>
There wasn't that many changes I had to do, but there were a few.
Thanks for everyone who commented and came with working ideas.
Note that there are some bugs in the code I haven't fixed up yet.
The any
argument is for post_status
, I don't think it is accepted for post_type
('post_status' => 'any'
)(actually, it wasn't correctly implemented in some versions)
You can give post_type an array with some types instead:
'post_type' => array('post','page','event')