Support » Plugins » Hacks » trying to pass a variable into an add_filter

  • I have a list of posts that I want to allow the user to filter based on information in custom fields. Both $iTimeframe and $iRegion are user inputs from dropdowns. If they have a value then the query needs to be updated. This is being done with the add_filter to the post_where. The first one for $iTimeframe works as expected, however the one for $iRegion–where it is necessary to actually pass the string for the region in order to get a match–doesn’t work.

    $args = array(
        'offset' => $setOffset,
        'category_name' => $pdOutput[0],
        'orderby' => 'meta_value',
        'meta_key' => 'EventDate',
        'order' => 'ASC',
        'paged' => $paged,
        'posts_per_page' => LIMIT_PD
        );
    
        if ($iTimeframe == "upcoming") {
          add_filter( 'posts_where', 'filter_where_pd_upcoming' );
        } else {
          add_filter( 'posts_where', 'filter_where_pd_past' );
        } 
    
        if ($iRegion !="") {
          add_filter( 'posts_where','filter_where_pd_region', '', 1 );
        } 
    
        $pdlist_query = new WP_Query( $args );
        [and Loop...]
    
    function filter_where_pd_upcoming () {
        $where .= " AND meta_key = 'EventDate' AND FROM_DAYS(TO_DAYS(meta_value))+0 >= CURDATE()";
        return $where;
    }
    function filter_where_pd_past () {
        $where .= " AND meta_key = 'EventDate' AND FROM_DAYS(TO_DAYS(meta_value))+0 < CURDATE()";
        return $where;
    }
    function filter_where_pd_region ($iRegion) {
        $where .= " AND meta_key = 'RegionBC' AND meta_value='".$iRegion."'";
        return $where;
    }

    Based on the tests I’ve done, I don’t think $iRegion is making it inside the function. When I tried echoing $iRegion inside the function I got the following:

    AND ( wp_term_relationships.term_taxonomy_id IN (24) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND wp_postmeta.meta_key = 'EventDate'

    …which I’m guessing is actually the where statement being picked up.

    Help would be greatly appreciated.

  • The topic ‘trying to pass a variable into an add_filter’ is closed to new replies.