WordPress.org

Ready to get started?Download WordPress

Forums

trying to pass a variable into an add_filter (1 post)

  1. wynnara
    Member
    Posted 2 years ago #

    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.

Topic Closed

This topic has been closed to new replies.

About this Topic