2

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>
            <?php   
                    $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>');
                    }
                ?>
        </ul>
    <?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>
                    </div>
            <?php endwhile; ?>

Thanks Nick.

1
  • 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. Sep 29, 2011 at 17:22

1 Answer 1

1

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:

<?php 
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.:

<?php
// 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.

2
  • 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, 2011 at 22:35
  • See edited answer, above. You have to update the Loop query in category.php. Sep 30, 2011 at 0:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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