Exclude categories from custom blog archive page
-
Ok I am working on a site that has an existing custom Archive page that was done by a freelancer. It’s a bit too complicated for me to make the edit that I need to make.
Basically the client is using certain categories for different content that they don’t want to show up on the blog Archive page.
So I think I need to edit the query to the database to exclude the certain categories:
if ( ! empty( $category__in ) ) { $join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) "; $where .= " AND $wpdb->term_taxonomy.taxonomy = 'category' "; $include_cats = "'" . implode("', '", $category__in) . "'"; $where .= " AND $wpdb->term_taxonomy.term_id IN ($include_cats) "; } else { $join = apply_filters('getarchives_join', "", $r); }
Any help would be much appreciated!
Here is the complete function in functions.php :
function custom_archives($args = null) { global $wpdb, $wp_locale; $defaults = array( 'type' => 'monthly', 'limit' => '', 'category__in' => array(), 'format' => 'html', 'before' => '', 'after' => '', 'show_post_count' => false, 'show_posts' => true ); $r = wp_parse_args( $args, $defaults ); extract( $r, EXTR_SKIP ); if ( '' == $type ) $type = 'monthly'; if ( '' != $limit ) { $limit = (int) $limit; $limit = ' LIMIT '.$limit; } // this is what will separate dates on weekly archive links $archive_week_separator = '–'; // over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride $archive_date_format_over_ride = 0; // options for daily archive (only if you over-ride the general date format) $archive_day_date_format = 'Y/m/d'; // options for weekly archive (only if you over-ride the general date format) $archive_week_start_date_format = 'Y/m/d'; $archive_week_end_date_format = 'Y/m/d'; if ( !$archive_date_format_over_ride ) { $archive_day_date_format = get_option('date_format'); $archive_week_start_date_format = get_option('date_format'); $archive_week_end_date_format = get_option('date_format'); } $add_hours = intval(get_option('gmt_offset')); $add_minutes = intval(60 * (get_option('gmt_offset') - $add_hours)); //filters $where = apply_filters('getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); if ( ! empty( $category__in ) ) { $join = " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) "; $where .= " AND $wpdb->term_taxonomy.taxonomy = 'category' "; $include_cats = "'" . implode("', '", $category__in) . "'"; $where .= " AND $wpdb->term_taxonomy.term_id IN ($include_cats) "; } else { $join = apply_filters('getarchives_join', "", $r); } if ( 'monthly' == $type ) { $arcresults = $wpdb->get_results("SELECT DISTINCT YEAR(post_date) AS <code>year</code>, MONTH(post_date) AS <code>month</code>, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC" . $limit); if ( $arcresults ) { $afterafter = $after; foreach ( $arcresults as $arcresult ) { $url = get_month_link($arcresult->year, $arcresult->month); $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year); /* Query posts for that month */ $after = ''; if ( $show_posts ) : query_posts(array('monthnum' => $arcresult->month, 'year' => $arcresult->year)); while (have_posts()) : the_post(); $after .= '<div class="post"> <h3><a href="' . get_permalink() . '" rel="bookmark" title="Continue reading ' . get_the_title() . '">' . get_the_title() . '</a></h3> <div class="blog-post"> <h4>' . get_the_time('l, F jS, Y') . ' at ' . get_the_time('g:i A') . ' EST ' . '<a href="' . get_edit_post_link( $post->ID ) . '" title="' . __( 'Edit post' ) . '">' . $link . '</a>' . '</h4> ' . get_the_excerpt("Continue reading...") . ' </div> </div>'; endwhile; endif; if ( $show_post_count ) $text = $text . ' ('.$arcresult->posts.')'; if ( $show_posts ) echo get_archives_link($url, $text, 'html', '<h2>', '</h2>' . $after); else echo get_archives_link($url, $text, 'html', '', '' . $after); } } } }
- The topic ‘Exclude categories from custom blog archive page’ is closed to new replies.