Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get_the_terms - display all post types

The question has been updated. See below for latest version

I am having troubles to see all post types when using custom posts. This is based on isotope, and the user is supposed to click on the links to see posts within that category.

All posts created by Wordpress standard posts appears, but none created with Types (Custom posts).

<ul id="filters" class="whitetext whitelink myeluft">
    <li><a href="#" data-filter="*" class="selected">Alle</a></li>
    <li><a href='#' data-filter='.foto'>Foto</a></li>
    <li><a href='#' data-filter='.video'>Video</a></li>
    <li><a href='#' data-filter='.web'>Web</a></li>
</ul>

<?php $the_query = new WP_Query( 'posts_per_page=50' ); //Check the WP_Query docs to see how you can limit which posts to display ?>
<?php if ( $the_query->have_posts() ) : ?>
    <div id="isotope-list">
        <?php while ( $the_query->have_posts() ) : $the_query->the_post(); 


        // Query posts - post_types
        $anypost = get_posts( array(
             'post_type'      => 'any' // every post type, but not attachments
        ) );

        $termsArray = get_the_terms( $post->ID, "category", $anypost);  //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-3"> <?php // 'item' is used as an identifier (see Setp 5, line 6) ?>
            <h3><?php the_title(); ?></h3>
                <?php if ( has_post_thumbnail() ) { 
                          the_post_thumbnail();
                    } ?>
        </div> <!-- end item -->
        <?php endwhile;  ?>
    </div> <!-- end isotope-list -->
<?php endif; ?>

As you see, I have tried fixing it by inserting the following code, but it still doesn't show all post types.

// Query posts - post_types
$anypost = get_posts( array(
    'post_type'      => 'any' // every post type, but not attachments
) );

$termsArray = get_the_terms( $post->ID, "category", $anypost);  //Get the terms for this particular item

I have read this article, but I found my self more loss than started/

What would be a working solution?

Update

By using the following code I am able to see all posts, but not being able to filter them out. See page here: http://goo.gl/e3cLuM (scroll down till you see all the posts)

<?php $post_type = 'any';
$post_taxonomy = 'any';
// Get all
$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">
    <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 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 $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">Nettside</span>
                                            <a href="#" class="smoothtrans">Se prosjekt</a>
                                        </figcaption>
                                    </figure>
                                </li>
                            </ul>             
                        </div> <!-- end item -->
                    <?php endwhile;  ?>
                </div> <!-- end isotope-list -->
            <?php endif; ?>
like image 671
Olen Avatar asked Jul 03 '15 08:07

Olen


2 Answers

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; ?>
like image 113
Touqeer Shafi Avatar answered Oct 22 '22 20:10

Touqeer Shafi


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.

like image 26
Olen Avatar answered Oct 22 '22 19:10

Olen