logo

$10
Can you paginate my custom post loop?

We have a custom post type loop for a client's project. This portfolio CPT needs to display X number of posts per loop. The number will change depending upon which version of the portfolio template the client is using.

I am looking for a finished and tested solution that does not involve a plugin. The number of posts displayed at one time should be defined via theme option function; the format we use is included.

Thanks guys!

Current loop
<?php query_posts(array('post_type' => array('portfolio', 'orderby'=> 'menu_order'))); if (have_posts()) : while (have_posts()) : the_post(); ?>

--posts--
<?php endwhile; ?>               
<nav>
<div><?php next_posts_link('&laquo; Older Entries') ?></div>
<div><?php previous_posts_link('Newer Entries &raquo;') ?></div>
</nav>
<?php endif; ?>


Theme option format
$settings['shortname_option_name']

Matt Taylor | 10/04/10 at 3:14pm | Edit


(2) Possible Answers Submitted...

  • avatar
    Last edited:
    10/08/10
    7:05am
    Maor Barazany says:

    Currently you can't paginate a custom post type without a plugin if you use permalinks.
    Only if you use the WP default, you can paginate.

    That is a known issue on WP3.0 and 3.0.1, they just didn't create a them hierarchy file for custom posts type, and thus all of these issues.
    I think I saw in WP Dev blog that they intend to extend the template hierarchy in WP3.1 to include also file for custom-post-type's archive page, and then it will be simple as having pagination to any other posts archives.
    Till 3.1, the Simple Custom Post Type Archives just do the job of having this template file hierarchy enabled and doing the correct rewrites that should be done for this to work.


    After activating it, create a template file to show your "archive" custom-post-type.
    Take the archive.php (or index.php etc) from your theme, duplicate it and rename the file name to type-slug.php, Where slug is the value you gave as slug parameter when you registered your post type:

    'rewrite' => array('slug' => 'news'),


    i.e. if the slug is news, the filename would be type-news.php

    Then, in the php file you created, find the loop (the line that starts with

    if (have_posts()) : ?>

    <?php while (have_posts()) : the_post();



    and just before it add this line:

    query_posts('posts_per_page=10&paged='.$paged.'&post_type=news');


    Of course, put your post type name you really have, and change the posts_per_page you want. If you want the number of posts per page to be dynamic via your option page, just call it and assign it's value:


    $per_page = $settings['shortname_option_name'];
    query_posts('posts_per_page='.$per_page.'&paged='.$paged.'&post_type=news');

  • avatar
    Last edited:
    10/07/10
    2:40am
    Oleg Butuzov says:

    yes why not.
    what is page name (page slug ) that you had attache this post type query loop?

    Previous versions of this answer: 10/07/10 at 2:40am

This question has expired.





Current status of this question: Completed