我找到了很多关于WP重写的帖子,但我找不到合适的词来描述这个问题。
我正在努力实现以下目标:mysite.com/examentraining/vak/biologie/havo
将重写为/examentraining/vak?vakname=biologie&level=havo
所以当用户输入mysite.com/examentraining/vak/biologie/havo
在地址栏中,应显示mysite.com/examentraining/vak/
页面,但应用程序应该能够使用斜杠之间的最后两个值作为get参数(因此对于短代码脚本,url必须如下所示/examentraining/vak?vakname=biologie&level=havo
)
我已经试过了http://codex.wordpress.org/Function_Reference/WP_Rewrite. 但最接近我的例子使用了一个数字,并且只使用变量。在这一点上,语法对我来说没有足够的意义来适应我的需要。另外,当我想使用两个变量时,我是否必须调用我的\\u insert\\u query\\u vars($vars)两次?
我希望没有一个像我一样的问题我没有找到。
编辑2周多后我仍然没有解决这个问题。
我做了以下操作,但似乎不起作用,规则被正确导入(通过wordpress插件检查,插件甚至说规则与请求url匹配)。但它不会重写。
// Adding a new rule
function my_insert_rewrite_rules($rules)
{
$newrules = array();
$newrules[\'examentraining/training/([0-9]{1,})/?$\'] = \'index.php/?p=1320&id=$matches[1]\';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function my_insert_query_vars($vars)
{
array_push($vars, \'id\');
return $vars;
}
我首先尝试了一个更简单的示例,我想重写这段代码
example.com/examentraining/training/513/ to example.com/?p=1320&id=513
因此,我想打开页面id为1320的页面(这很有效),并将id参数传递到此页面,以便我的php代码可以通过
$wp_query->query_vars[\'trainingid\']
或者通过$\\u GET[\'trainingid\'](访问url/?p=1320和id=513正常工作)。此url中唯一更改的是id的最后一部分(示例中为513)。
谁能告诉我重写规则出了什么问题吗?
编辑2
我后来读到,在wordpress中使用id这样的通用get参数是不明智的,所以我改变了这一点,并尝试了另一种获取页面的方法(直接从wordpress调用Als时,Als可以工作)
/ Adding a new rule
function my_insert_rewrite_rules($rules)
{
$newrules = array();
$newrules[\'examentraining/training/([0-9]+)/?$\'] = \'index.php?pagename=examentraining/training&trainingid=$matches[1]\';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function my_insert_query_vars($vars)
{
array_push($vars, \'trainingid\');
return $vars;
}
为了测试,我每次初始化都刷新规则。
我会继续寻找,但我真的希望有人能给我指出正确的方向。
最合适的回答,由SO网友:Elian ten Holder 整理而成
我终于解决了重写规则的问题。我使用了这个问题答案中列出的课程wordpress.stackoverflow question. 在包含该类之后,我使用以下代码使其工作:
// These query vars can be retrieved on the page by using get_query_var( \'queryvar1\' );
$options = array(
\'query_vars\' => array(
\'queryvar1\',
\'queryvar2\',
\'queryvar3\',
\'queryvar4\',
\'queryvar5\',
\'queryvar6\'
),
\'rules\' => array(
\'uncategorized/somename/([^/]+)/?$\'=> \'index.php?p=1020&ident=$matches[1]\'
)
);
$rewrite = new AddRewriteRules( $options );
add_action( \'wp_head\', array(
&$rewrite,
\'flush_rules\'
) );
add_action( \'generate_rewrite_rules\', array(
&$rewrite,
\'add_rewrite_rules\'
) );
add_filter( \'query_vars\', array(
&$rewrite,
\'add_query_vars\'
) );
我希望这对有同样问题的人有用。