WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

My current theme has a portfolio section where you can have an array items based on what category they are in. My problem is that I have several pages that I want to be in the portfolio section but can't add them there because you can't assign categories to individual pages only posts. Is there any method or plugin around this issue?

This is some code that I believe calls the category in my portfolio.php:

<?php  if(is_category() && in_category($current_id) || post_is_in_descendant_category($current_id)){?>
        <h1><?php single_cat_title(); ?></h1>
        <ul class="portfolioCategs">
            <li><a href="<?php echo get_category_link(get_option('boldy_portfolio'))?>">All projects</a></li>
                    $categories = get_categories('hide_empty=1&child_of='.$categs);
                    foreach ($categories as $cat) {
                    echo ('<li><a href="');
                    echo (get_category_link($cat->cat_ID).'">'.$cat->cat_name.'</a></li>');
    <?php } ?>
    <div style="clear:both"></div>
        <div class="gallery">
            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                    <div class="portfolioItem">
                        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
                        <a href="<?php echo get_thumb_urlfull($post) ?>" rel="prettyPhoto" title="<?php the_title();?>"><?php the_post_thumbnail(); ?></a>
                        <p><?php the_excerpt() ?></p>
            <?php endwhile; ?>

Thanks Nick.

share|improve this question
I would suggest you create a custom post type for your portfolio. If that's not an option, create a parent page as a 'category' and then list your portfolio items as child pages. – Brian Fegter Sep 29 '11 at 17:22
up vote 1 down vote accepted

Category is a taxonomy that applies to Posts. Pages are not Posts. Pages are Pages.

If you need your content to use the Category taxonomy, you have a couple options:

  1. Use Posts, rather than Pages, for that content.
  2. Register the Category taxonomy for static Pages, e.g. by placing the following in functions.php (or in a Plugin):

Which will enable Categories for static Pages.

Grr... code doesn't want to show:

register_taxonomy_for_object_type( 'category', 'page' ); 

Edit 2

The correct way to modify the main loop query is via pre_get_posts, e.g. like so:

function wpse29834_filter_pre_get_posts( $query ) {
    if ( is_category() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'page' ) );
add_action( 'pre_get_posts', 'wpse29834_filter_pre_get_posts' );

Using pre_get_posts is preferred over using query_posts(), though the original solution works in this case.

(Original Solution)

To get your categorized Pages to display in the Loop on your category archive indexes, you'll need to modify the Loop query in category.php, which you do using the query_posts() function. e.g.:

// Declare the global
global $wp_query;
// Define our custom args
// We're telling the query to use
// both Posts and Pages
$custom_args = array( 'post_type' => array( 'post', 'page' ) );
// Merge the default query with our custom query
$query_args = array_merge( $wp_query->query, $custom_args );
// Finally, query posts based on our custom args
query_posts( $query_args );

Place this code before you output the Loop.

share|improve this answer
I tied doing this but it doesn't seem to be working. I looked in the functions.php for taxonomy but couldn't find anything. I believe this is the function that is populating the page with the categories, see the edit above. Is there a way I could just add a static url to add to the portfolio ? – Nick Sep 29 '11 at 22:35
See edited answer, above. You have to update the Loop query in category.php. – Chip Bennett Sep 30 '11 at 0:01

Your Answer


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.