Ask your WordPress questions! Pay money and get answers fast! Comodo Trusted Site Seal
Official PayPal Seal

Display Related Posts Based on Category for a Custom Post WordPress

  • SOLVED

Hi everyone!

I have a script that displays related posts for standard posts but I need to modify it to display related posts from a custom post type.

The custom post type I'm trying to modify is using the following:

Custom Post Type = 'gallery'
Term (the custom post's categories) = 'portfolio-type'

And here's a related posts script I'd like to use but I need help modifying it for the custom post type.


<?php
$orig_post = $post;
global $post;

$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;

$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 2, // Number of related posts that will be shown.
'caller_get_posts'=>1
);

$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo '<div id="related_posts"><h3>Related Posts</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post();?>

<li><div class="relatedthumb"><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="relatedcontent">
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>

Answers (2)

2011-10-28

Luis Abarca answers:

Try this way

$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 2, // Number of related posts that will be shown.
'caller_get_posts'=>1,
<strong>'post_type' => 'gallery'</strong>
);


$my_query = new WP_Query( $args );


beowulf comments:

Thanks. Adding the post type seems like a logical start. But I still don't think it's grabbing the custom post type's 'categories'.

I need the category array to be something like this:


$taxonomy = 'portfolio-type';
$categories = get_terms($taxonomy);

if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;


But it's not displaying any posts.


Luis Abarca comments:

You are right, i didn't notice:

$taxonomy = 'portfolio-type';
$categories = get_terms($taxonomy);

$categories = get_the_category($post->ID);

if ($categories) {
$category_ids = array();

foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;


$args = array(
<strong>'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'id',
'terms' => $category_ids
)
),
'post_type' => 'gallery',</strong>
'post__not_in' => array($post->ID),
'posts_per_page'=> 2, // Number of related posts that will be shown.
'caller_get_posts'=>1
);

$my_query = new WP_Query( $args );


beowulf comments:

Great!

I just removed this:


$categories = get_the_category($post->ID);


...and it's working! :)

2011-10-28

Luis Cordova answers:

nice