开发者

Wordpress custom post type categories

开发者 https://www.devze.com 2023-02-10 02:55 出处:网络
Hey. I am using a custom post type in wordpress. I register this custom post type like this: register_post_type(\"lifestream\", array(

Hey. I am using a custom post type in wordpress. I register this custom post type like this:

        register_post_type("lifestream", array(
            'label' => 'Lifestream',
            'public' => true,
            'hierarchical' => true,
            'menu_position' => 5,
            'supports' => array('title','editor','author','thumbnail','comments','custom-fields'),
            'taxonomies' => array('category','post_tag'),
            'query_var' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'caller_get_posts' => 1

        ));
        register_taxonomy_for_object_type('category', 'lifestream');
        register_taxonomy_for_object_type('post_tag', 'lifestream');

In the theme (the loop template) I like to combine posts and my custom post type, for that I am using query_posts() with these parameters:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'post_type' => array('post', 'lifestream'),
    'paged' => $paged,
    'cat' => $wp_query->get('cat'),
    'tag' => $wp_query->get('tag'),
    'year' => $wp_query->get('year'),
    'monthnum' => $wp_query->get('monthnum'),
    'post_status' => 'publish',
    'showposts' => 3
);
query_posts($args); 


# the loop     
while ( have_posts() ) : the_post(); 
# markup
endwhile;


if($wp_query->max_num_pages > 1): 
# next_posts_link / previous_posts_link
endif;

wp_reset_query();   

This is working so far. But, I got problems with the category and tags pages. If I call the frontpage everything is fine and I can paginate through the pages getting the correct results.

And, if I call a paged URL, e.g. /category/mycat/page/2 a 404 is thrown. But there definitly开发者_开发问答 should be posts. No matter if there are custom type posts or normale posts in the category. I suppose that my parameters for query_posts() aren´t correct, but don´t know ...

It seems that $wp_query->max_num_pages has the wrong value. But why? Do I register the taxonomies (I like to use categories and tags for my custom post types) correctly?

Do you have any Idea what to do? Thanks a lot!


I have just encountered the exact same problem and couldn't find the solution anywhere! The internets are full of resources about the topic but none provided the correct answer to the issue.

Here's the correct answer for anyone searching. Put the below code in functions.php in your theme's root directory.

function init_category($request) {
    $vars = $request->query_vars;
    if (is_category() && !is_category('Blog') && !array_key_exists('post_type', $vars)) :
        $vars = array_merge(
            $vars,
            array('post_type' => 'any')
        );
        $request->query_vars = $vars;
    endif;
    return $request;
}
add_filter('pre_get_posts', 'init_category');

All credits go to Mike who posted this on Wordpress.com. Cheers!


Make sure you add this:

'paged' => get_query_var('paged')

to your $args and it should accept the paging okay.

More here


In the archive.php try using the following:

query_posts( array(
  'post_type' => 'lifestream',
  'posts_per_page' => 6,
  'orderby' => 'menu_order',
  'orderby' => 'date',
  'order' => 'ASC',
  'paged' => '' . get_query_var('paged')
));

if ( have_posts() ) : while ( have_posts() ) : the_post();

endwhile; else:
endif;

For the next and previous page links I use:

next_posts_link('Older Entries', $wp_query->max_num_pages);
previous_posts_link('Newer Entries', $wp_query->max_num_pages);
0

精彩评论

暂无评论...
验证码 换一张
取 消