WordPress RSS提要-按自定义字段值过滤RSS内容

时间:2013-10-11 作者:Grávuj Miklós Henrich

我可以将RSS提要url设置为:

http://www.mydomain.com/?post_type=job_listing&job_cat=value#1&job_type=value#2&geo_country=value#3&feed=rss2
job_cat &;job_typejob_listing 文章类型,并在RSS提要中正确考虑/生成。

最近,我在te RSS提要url中添加了一个名为geo_country. 如果在RSS提要url中为此返回了一个值(不是空的),那么RSS内容也应该通过自定义字段的值进行过滤。当然,这目前还没有发生。

使用Jobbroller 主题,但我没有在其中找到任何与RSS相关的代码、函数。

有没有办法在所描述的场景中编写钩子?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

您可以尝试添加geo_country 作为额外的查询变量,具有:

/**
 * Add the \'geo_country\' as a public query variable
 *
 * @param array $query_vars
 * @return array $query_vars
 */ 
function my_query_vars( $query_vars ) 
{
    $query_vars[] = \'geo_country\';
    return $query_vars;
}

add_filter( \'query_vars\', \'my_query_vars\' );
然后设置pre_get_posts 钩子根据geo_country 值:

/**
 * Filter the feed by the \'geo_country\' meta key 
 *
 * @param WP_Query object $query
 * @return void 
 */ 
function my_pre_get_posts( $query ) 
{
    // only for feeds
    if( $query->is_feed && $query->is_main_query() ) 
    {
        // check if the geo_country variable is set 
        if( isset( $query->query_vars[\'geo_country\'] ) 
                && ! empty( $query->query_vars[\'geo_country\'] ) )
        {

            // if you only want to allow \'alpha-numerics\':
            $geo_country =  preg_replace( "/[^a-zA-Z0-9]/", "", $query->query_vars[\'geo_country\'] ); 

            // set up the meta query for geo_country
            $query->set( \'meta_key\', \'geo_country\' );
            $query->set( \'meta_value\', $geo_country );
        }

    } 
}

add_action( \'pre_get_posts\', \'my_pre_get_posts\' );
我想geo_country 只接受字母数字值(a-z,A-Z,0-9), 如果不是这样,请告诉我。

这适用于我的安装,主题为“二十一二”。

结束