Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I'm really struggling with this... I created a few Custom Post Types, let's say...

  • Books
  • CD's
  • Maps

Now I also have a whole bunch of existing categories and some of these would apply to more than one Custom Post Type. For example, the "Available" category could be assigned to all of these Custom Post Types.

Now I'm running into a whole bunch of issues when I try to access the categories, either programmatically, or through the front end's archive pages.

For example, to put recent posts from all Custom Post Types on the home page, I had to do this...

function get_custom_posts( $query ) {
    if ( ! is_admin() && empty($query->query_vars['suppress_filters']) ) { // is not in Dashboard (is_admin => Dashboard)       
        if ( is_home() ) { // home page
            return $query->set( 'post_type', array( 'post', 'books', 'cds', 'maps' ) );
        } else if .....
    }
}
add_filter( 'pre_get_posts', 'get_custom_posts' );

And the more I discover working strangely, the more I have to go back and fix.

Presently I'm trying to retrieve all posts from the "Available" category for a slideshow and the Dashboard is showing me there are 19 posts in this category.

However, when I run this code...

<?php

global $post;

$featured_posts = get_posts( 
    array(
        'post_type' => array( 'post', 'books', 'cds', 'maps' ),
        'category' => get_theme_option('featured_posts_category')
        )
    );

foreach($featured_posts as $post) {

    setup_postdata($post);

    $slide_image = get_the_post_thumbnail($post->ID, 'medium');
    echo '<a href="'.get_permalink($post->ID).'">'.$slide_image.'</a>';
    ....
}

?>

I'm getting far fewer posts than the 19 I expect and the ones I'm getting back are only coming from the "CDs" Custom Post Type and all other Post Types are ignored. Similarly, I get other unpredictable or strange results when selecting other categories. This all leads me to believe that I shouldn't be sharing the same category across multiple Post Types... can anyone confirm this or explain further what I may be missing here?

share|improve this question
    
Regarding the way you have to call in all the post types in an array is correct and standard behaviour. Also to note an archive page is specifically for one post type only.Try using a tax_query in your arguments array as opposed to the category. Also can you confirm what you is being returned by get_theme_option('featured_posts_category'); is it an id, object etc –  MichaelJames Jan 15 at 21:49
    
@Mike, Thanks. My get_theme_option() is returning a category ID and it's proven code that was working before I created the Custom Post Types. –  Sparky Jan 15 at 22:01
    
your get_posts needs a posts_per_page argument if you want more than whatever the default number per page is. –  Milo Jan 15 at 22:04
    
@Milo, what if I want "all"? –  Sparky Jan 15 at 22:05
    
set it to -1 to get all. –  Milo Jan 15 at 22:07

2 Answers 2

up vote 1 down vote accepted

Your get_posts call needs a posts_per_page argument if you want more than whatever the default number per page is. Use -1 to retrieve all matching posts.

$featured_posts = get_posts( 
    array(
        'post_type' => array( 'post', 'books', 'cds', 'maps' ),
        'category' => get_theme_option('featured_posts_category'),
        'posts_per_page' => -1
    )
);
share|improve this answer

Try removing the parameter:

'category' => get_theme_option('featured_posts_category')

and replace with:

'tax_query' => array(
    array(
        'taxonomy' => 'category',
        'field' => 'id',
        'terms' => get_theme_option('featured_posts_category')
    )
)

I believe you are facing issues because the parameters named "category" or "cat" used inside of queries are inherently related to the default "post" post_type.

share|improve this answer
    
The result is the same... only getting results from one category. –  Sparky Jan 15 at 22:12
    
@Milo nailed it. Your code is working as broken as mine. Had to add the 'numberposts' => -1 to get all the posts. –  Sparky Jan 15 at 22:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.