• 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 . '&nbsp;('.$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.