[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