I have an author page, and I want to list posts from current author’s categories.
e.g. I’m viewing John’s page, and John wrote in Sport, Tech, News, Computer categories.
Then my code list from this (Sport, Tech, News, Computer) categories list random 10 post.
But something is going wrong:
Those 4 categories have 25 posts. But my code isn’t listing 10 posts, it’s just listing 1 post. And i need random post list
My code:
<?php global $post, $wpdb;
$author_id = $post->post_author;
$categories = $wpdb->get_results("
SELECT DISTINCT(terms.term_id) as ID, terms.name, terms.slug
FROM $wpdb->posts as posts
LEFT JOIN $wpdb->term_relationships as relationships ON posts.ID = relationships.object_ID
LEFT JOIN $wpdb->term_taxonomy as tax ON relationships.term_taxonomy_id = tax.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms ON tax.term_id = terms.term_id
WHERE 1=1 AND (
posts.post_status = 'publish' AND
posts.post_author = '$author_id' AND
tax.taxonomy = 'category' )
ORDER BY terms.name ASC
");
foreach($categories as $category) :
$catnumber = $category->ID.',';
endforeach;?>
<?php
$args = array(
'category__and' => array( $catnumber )
, 'showposts'=> '10'
);
$my_query = new WP_Query( $args );
?>
<ul>
<?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
<ul>
<?php wp_reset_postdata(); ?>
Granted, I may be misinterpreting you. Your post is not very clear but …
category__and
will require the posts to be in both categories. It sounds like you need posts in any of the categories. You should be usingcategory__in
so that you get anOR
match on the categories instead of anAND
match.showposts
is deprecated.Both
category__and
andcategory__in
accept an array. You are building a comma separated string of categories and then casting it as an array. That is not likely to work as expected.Build your category array like this:
And query like this:
http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters