query_posts with meta_value

时间:2015-07-31 作者:PerfectGohan

我有类别\'news\' http://localhost/foldername/news, 对于每个\'news\' 我的自定义字段名为\'years\' 并设置为文本字段。我在不同的岗位上分配了2个值\'2013\'\'2014\'.

我首先要做的只是展示2014 在中发布\'news\' 类别http://localhost/foldername/news 第二个是传递url参数,所以如果我想显示\'2013\' 要使用以下内容http://localhost/foldername/news/?years=2013

我已经选择了属性,所以用户将选择显示哪一年的帖子,但默认情况下将显示2014年的帖子

 <select>
  <option value="2014">2014</option>
  <option value="2013">2013</option>
</select>
第一次,我发现以下解决方案仅显示\'2014\' 在中发布\'news\' http://localhost/foldername/news:

    $args= array(   
    \'meta_key\' => \'years\',
    \'meta_value\' => \'2014\',
    );
   query_posts($args);
现在我最大的问题是我传递参数来显示\'2013\' 发布但不起作用

尝试了以下操作:

function wpse129223_custom_meta_query( $query ) {

    // If not on the main query, or on an admin page, bail here
    if ( ! $query->is_main_query() || is_admin() ) {
    return;
}

// If \'type\' isn\'t being passed as a query string, bail here
if ( empty( $_GET[\'years\'] ) ) {
    return;
}

// Get the existing meta query, cast as array
$meta_query = (array) $query->get(\'meta_query\');

    // Convert \'type\' into an array of types
    $types = explode( \',\', $_GET[\'years\'] );

    // Ensure that types aren\'t empty
    if ( is_array( $types ) && ! empty( $types ) ) {

        // Build a meta query for this type
        $meta_query[] = array(
            \'key\'     => \'years\',
            \'value\'   => $types,
            \'compare\' => \'IN\',
        );

        // Update the meta query
        $query->set( \'meta_query\', $meta_query );
    } 

}
add_action( \'pre_get_posts\', \'wpse129223_custom_meta_query\' );
但每次我去http://localhost/foldername/news/?years=2013 还是给我看\'2014\' 职位

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

根据评论,只需使用pre_get_posts 过滤器(否query_posts()) 非常适合您,只需进行一些调整(如测试$query->is_category( \'news\' ) 因此,它只在新闻查询中运行,并将默认值设置为“2014”,而不是在no$_GET, eg公司

function wpse129223_custom_meta_query( $query ) {

    // If not on the main query, or on an admin page, bail here
    if ( ! $query->is_main_query() || is_admin() || ! $query->is_category( \'news\' ) ) {
        return;
    }

    // Get the existing meta query, cast as array
    $meta_query = (array) $query->get(\'meta_query\');

    // Convert \'type\' into an array of types
    $types = explode( \',\', empty( $_GET[\'years\'] ) ? \'2014\' : $_GET[\'years\'] );

    // Ensure that types aren\'t empty
    if ( is_array( $types ) && ! empty( $types ) ) {

        // Build a meta query for this type
        $meta_query[] = array(
            \'key\'     => \'years\',
            \'value\'   => $types,
            \'compare\' => \'IN\',
        );

        // Update the meta query
        $query->set( \'meta_query\', $meta_query );
    } 

}
add_action( \'pre_get_posts\', \'wpse129223_custom_meta_query\' );

结束

相关推荐

Return array keys and values

我正在函数中创建一些选项。php文件。我创建了一个函数,该函数在前端获取输入,将值放入一个新数组,然后将它们返回到前端。我试图找出如何像关联数组一样返回值。例如,我希望数组像这样返回Array ( [dribble_id] => dribble [google_id] => google [facebook_id] => facebook [twitter_id] => twitter ) 下面的函数按如下方式返回它们 Array ( [0] => dribble