The below code is taken from sidebar.php where it outputs random posts from multiple categories and excludes the current post from showing up. This works great but how do I alter this loop to exclude all posts from the current pages category? So for example if a post is currently on display and its category is artists, I'd like to exclude all artists posts from being displayed but display all the other categories (stated in the code below).
This is my loop:
<?php
// First, let's eliminate some DRY,
// by making an array of our categories
$random_posts_cat_array = array( 'artists', 'projects', 'people', 'development', 'offsite' );
// Globalize $post,
// since we're outside the primary loop
global $post;
$post_cats = get_the_category( $post->ID );
// First array object
$post_cat = $post_cats[0];
// Current post category ID
$post_cat_id = $post_cat->term_id;
// Current post category slug
$post_cat_slug = $post_cat->slug;
// Now, let's find out if we're displaying
// the category index for one of our categories
if ( in_array( $post_cat_slug, $random_posts_cat_array ) ) {
// Set up custom loop args
$random_posts_query_args = array(
'posts_per_page' => 3,
'orderby' => 'rand',
'post__not_in' => array( $post->ID )
);
// Add Cat ID to custom loop args
foreach ( $random_posts_cat_array as $random_post_cat ) {
if ( $post_cat_slug == $random_post_cat ) {
// Add Cat ID
$random_posts_query_args['cat'] = $post_cat_id;
}
}
// Run random posts query
$random_posts_query = new WP_Query( $random_posts_query_args );
// Setup random posts query loop
if ( $random_posts_query->have_posts() ) : while ( $random_posts_query->have_posts() ) : $random_posts_query->the_post();?>
<?php foreach( get_the_category() as $cat ) echo '<div class="module ' . $cat->slug . '" data-category="' . $cat->slug . '" >'; ?>
<a href="<?php the_permalink()?>" title="<?php the_title(); ?>">
<div class="active">
<div class="hover"></div>
<?php the_post_thumbnail(); ?>
</div>
<?php
$sub_title=get_post_meta($post->ID,'subtitle',true);
if($sub_title != '') {
echo '<h1>'. get_the_title() .'<span> / '. $sub_title .'</span></h1>';
} else {
echo '<h1>'. get_the_title() .'</h1>';
}
?>
<?php
// Call in the contents of a custom field called Excerpt and if custom field in admin panel is empty don't display <p> tags otherwise wrap contents in <p> tags
$excerpt=get_post_meta($post->ID,'Excerpt',true);
if($excerpt != '') {
echo '<p>'. $excerpt .'</p>';
} else {
echo ' ';
}
?>
<p class="date"><?php the_time('YdmHi') ?></p>
</a>
</div>
<?php endwhile; endif;
// Be kind; rewind
wp_reset_postdata();
} else { // display nothing ?>
<?php }?>