[wp-hackers] Filter 2 categories with a plugin

DD32 wordpress at dd32.id.au
Wed Nov 12 07:26:43 GMT 2008


I'm thinking you probably need to hook in on the WP_Query side of things,
Perhaps on the hook 'parse_query'
and with the set_query_var(), Call it on the $wp_query object, or as a  
standalone function:

set_query_var('category__and', array($cat1, $cat2));

On Wed, 12 Nov 2008 18:16:30 +1100, Moises Kirsch <moi at kirsch.com.mx>  
wrote:

> Hi,
>
> I'm trying to create a plugin that will filter two categories...
> (there is one out there allready that does this but I don't like how
> it works because from my point of view it is not using some standard
> functions on wordpress).
>
> According to this post by Ryan Boren
>
> http://boren.nu/archives/2007/10/01/taxonomy-intersections-and-unions/
>
> It should be very simple... but for some reason I can't make it work.
> Here is part of the code that I'm using:
>
> 	if($cat1 && $cat2){
> 		$wp->set_query_var('category__and', array($cat1, $cat2));	
> 	}
>
> Am I using the set query var correctly?
>
> Thats where it seams to fail right now... I can get the correct
> categories IDs (I'm working with permalinks). I know the if is working
> (I even hardcoded a few IDs to test it out).
>
> The only part that I am not sure about is the set query part.
>
> Im also posting the full code after this (ignore the comments in
> spanish).
>
> Hopefully someone can help me fix this.
>
> Thanks
>
>
> <code>
>
> <?php
> /*
> Plugin Name: Dual Cats by Moi
> Plugin URI: http://moiblog.com/
> Description: Filtra 2 categorias.
> Author: Moises Kirsch
> Version: 1.0
> Author URI: http://moiblog.com/
> */
>
>
> // Funcion condicional
> function is_dual_cats(){
> 	global $is_dual_cats;
> 	return $is_dual_cats;
> }
>
>
> add_action('parse_request', 'dual_cats_query' );
> function dual_cats_query(/* $cat1 = 16, $cat2 = 25 */){
> 	global $wp, $is_dual_cats, $wp_query;
> 			
> 	$cat1 = get_category_by_slug($wp->query_vars[cat1]);
> 	$cat2 = get_category_by_slug($wp->query_vars[cat2]);
>
> 	$cat1 = $cat1->term_id;
> 	$cat2 = $cat2->term_id;
>
> 	if($cat1 && $cat2){
> 		$is_dual_cats = true;
> 		//$wp_query->set('category__and', array($cat1, $cat2));
> 		$wp->set_query_var('category__and', array($cat1, $cat2));	
> 	}
> 	else{
> 		$is_dual_cats = false;
> 	}
> }
>
>
> // Reinciar las reglas del URL Rewrite
> add_action('init', 'dual_cats_flush_rewrite_rules');
> function dual_cats_flush_rewrite_rules()
> {
> 	global $wp_rewrite;
> 	$wp_rewrite->flush_rules();
> }
>
> // Reglas del URL Rewrite
> add_action('generate_rewrite_rules', 'dual_cats_add_rewrite_rules');
> function dual_cats_add_rewrite_rules( $wp_rewrite ){
> 	$new_rules = array('cats/(.+)/(.+)?$' => 'index.php?cat1='.
> $wp_rewrite->preg_index(1).'&cat2='.$wp_rewrite->preg_index(2) );
> 	$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
> }
>
>
> // Interceptar el template
> add_action('template_redirect', 'dual_cats_template_intercept');
> function dual_cats_template_intercept(){
> 	global $wp;
>
> 	//print_r($wp);
> 	
> 	if(is_dual_cats()){
> 		if(file_exists(TEMPLATEPATH.'/category.php')){
> 			include(TEMPLATEPATH.'/category.php');
> 			exit;
> 		}
> 		elseif(file_exists(TEMPLATEPATH.'/archive.php')){
> 			include(TEMPLATEPATH.'/archive.php');
> 			exit;
> 		}
> 		else{
> 			include(TEMPLATEPATH.'/index.php');
> 			exit;
> 		}
> 	}
>
> }
>
>
> // Agregar Variables al Query
> add_filter('query_vars', 'queryvars');
> function queryvars( $qvars ){
> 	$qvars[] = 'cat1';
> 	$qvars[] = 'cat2';
>    	return $qvars;
> }
> ?>
>
> </code>
>
> --
>
> Ing. Moises Kirsch Sandler
> 044 (81) 1044-3216
> moises at kirsch.com.mx
> www.subjetivo.com
>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>




More information about the wp-hackers mailing list