此问题可以通过WordPress Rewrite API
最简单的方法是,我假设您创建了一个名为year
请求很可能与此规则匹配(.+?)(/[0-9]+)?/?$
, 将查询重写为pagename=year
.
但是,您会从正则表达式中注意到/
可以与后面的数字匹配。
正在请求/year/1999
将查询转换为pagename=year&page=%2F1999
. 因此page
是将包含的内容1999
. 你可以使用get_query_var(\'page\');
并使用get_posts()
再多喂一点meta_key
和meta_value
要检索您的帖子,请执行以下操作:
$args[\'meta_key\'] = \'year\';
$args[\'meta_value\'] = get_query_var(\'page\');
// ... other arguments
$posts_array = get_posts( $args );
但这不是错吗如果使用这个意外的结果和在今年感觉不对的时候获取页面并将其输入的行为,您可以通过以下不同的方式来实现相同的结果
adding your own rewrite rule.
通过添加将匹配的规则^year/([^/]\\d+)/?\'
并重写为pagename=year&custom_year=$matches[1]
您将能够访问custom_year
通过$wp
全局对象。
// this has to be done only once!
add_rewrite_rule(\'^year/([^/]\\d+)/?\',
\'index.php?pagename=year&custom_year=$matches[1],
\'top\');
flush_rewrite_rules();
应该将上面的代码打包,以便挂接到
init
行动查询本身可以从
$wp->matched_query
属性,并且必须进行分析:
global $wp; // may be required to bring into scope
$q_args = array();
parse_str($wp->matched_query, $q_args);
$custom_year = $q_args[\'custom_year\'];
$args[\'meta_key\'] = \'year\';
$args[\'meta_value\'] = get_query_var(\'custom_year\');
// ... other arguments
$posts_array = get_posts( $args );
请注意如何选择自定义查询字段的名称,并确保它不会与任何
reserved terms.
从另一个角度来看,你最好从归档的角度而不是从页面的角度来看待整个情况。如果为帖子注册自己的自定义分类法,而不是自定义字段,则可以根据该分类法查询帖子,而无需手动添加其他重写规则。
这个register_taxonomy()
函数将允许您添加custom_year
分类法和it查询获取归档页,无需额外的解析、查询等。
你可能不得不flush_rewrite_rules()
在注册分类法之后,为了刷新一些新规则,WordPress在注册分类法时会自动生成一些新规则。
注意rewrite
您提供给的参数register_taxonomy()
, 将其设置为custom_year
您应该能够在分类法中查询帖子,而无需进一步修改。