我有类别\'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\' 职位
最合适的回答,由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\' );