下面显示了一个IF语句,它基于url运行两个自定义查询中的一个。我面临的问题是url是否包含分页,例如/page/2/
, 我的查询中断,因为url未正确匹配。我对php非常陌生,在我的搜索中,我遇到了一些不同的php函数,这些函数可能对我的情况有所帮助——我只是不确定如何使用它们,以及哪种函数更适合我的需要。这些是preg_match
, parse_url
, 和dirname
.
例如site.com/players
列出玩家和site.com/players/type/pro
列出职业球员。后者已被重写,实际上site.com/players/?type=pro
.
下面的if语句是我现在使用的语句,如果url在/pros/segment之后有任何内容,例如我的分页,则不会运行第一个查询:
if ( $_SERVER[\'REQUEST_URI\'] == \'/players/type/pros/\' ) {
//run the query to list the pros
}
else {
//run the default query for the players
}
下面是我需要做的,它可以工作,但不需要为每一页编写OR的所有体力劳动。这就是我猜测其中一个php函数将发挥作用的地方。
if ( $_SERVER[\'REQUEST_URI\'] == \'/players/type/pros/\' || $_SERVER[\'REQUEST_URI\'] == \'/players/type/pros/page/2/\' || $_SERVER[\'REQUEST_URI\'] == \'/players/type/pros/page/3/\' || $_SERVER[\'REQUEST_URI\'] == \'/players/type/pros/page/4/\' ) {
//run the query to list the pros
}
else {
//run the default query for the players
}
Update
感谢那些回答的人。我一直在钻研WordPress的重写,在这个网站上一些信息丰富的帖子的帮助下,我最终还是这样做了。
制作了一个名为“玩家类型”的新页面模板。处理传入查询的php。我可能需要进一步列出其他类型的球员。
在函数中设置一些重写规则。php
add_filter(\'init\', \'add_page_rewrite_rules\');
function add_page_rewrite_rules() {
//would match www.site.com/players/type/pro
add_rewrite_rule(\'^players/type/([^/]*)/?$\',\'index.php?pagename=player-types&type=$matches[1]\',\'top\');
//would match www.site.com/players/type/pro/page/2
add_rewrite_rule(\'^players/type/([^/]*)/page/([0-9]+)?$\',\'index.php?pagename=player-types&type=$matches[1]&paged=$matches[2]\',\'top\');
}
添加了
type
变量至
query_vars
所以我可以在新的页面模板上使用它(放在functions.php中)
add_filter( \'query_vars\', \'add_query_vars\' );
function add_query_vars( $query_vars ) {
$query_vars[] = \'type\'; //add type to query vars
return $query_vars;
}
最基本形式的页面模板如下所示
<?php /* Template Name: Player Types */ ?>
<?php if ( $wp_query->query_vars[\'type\'] == \'pro\' ) {
//custom pro query
} ?>
这让我
www.site.com/players/type/pro
我可以把它扩展到
www.site.com/players/type/whatever-else
. 普通玩家仍列在
www.site.com/players/
.
对于那些想知道的人,我没有使用分类法,因为我是根据他们的自定义WordPress角色(将作者id拉入查询)列出玩家,而不是有一个必须手动检查的复选框。