我正在为一个使用URL端点的插件编写重写规则,/modifier
, 创建query_var
&modifier=1
表示它应该做些别的事情。
重写处理URL,其中/modifier
附加到帖子、页面或自定义帖子类型的URL末尾。
看起来像是adding a rewrite endpoint 很理想,但根据Wordpressrewrite endpoints API 传入的URL需要以值结尾,如/modifier/1
为了自动重写为&modifier=1
通过端点API。如果端点后没有值,则解析为&modifier=
在检查isset
.
所以我还得走很长的路,viagenerate_rewrite_rules
. 对帖子和页面的重写很好——我可以把它包括在内,但可能并不相关。
在顶部添加的自定义帖子类型的重写在帖子类型显式硬编码时也可以工作。
add_filter(\'generate_rewrite_rules\', \'my_rewrite\');
function my_rewrite($wp_rewrite) {
// rewrite rules for custom post type "specific-type"
$cpt_rules = array(
\'specific-type-slug/([^/]+)/modifier\' => \'index.php?specific-type=\'. $wp_rewrite->preg_index(1) .\'&modifier=1\'
);
$wp_rewrite->rules = $cpt_rules + $wp_rewrite->rules;
}
问题是对所有自定义帖子类型进行循环。get_post_types()
仅在init
. 此重写正在筛选generate_rewrite_rules
, 前面的几个步骤。这是我试过的循环。这显然不起作用,帖子类型尚未设置。
add_filter(\'generate_rewrite_rules\', \'my_rewrite\');
function my_rewrite($wp_rewrite) {
global $wp_post_types;
$types = get_post_types( array( \'_builtin\' => false ) );
// get the registered data about each post type with get_post_type_object
foreach( $types as $type ) {
$cpt_rules = \'\';
$typeobj = get_post_type_object( $type );
if( isset( $typeobj->rewrite->slug ) ) {
$slug = $typeobj->rewrite->slug;
$cpt_rules = array(
$slug.\'/([^/]+)/modifier\' => \'index.php?\'.$type.\'=\'. $wp_rewrite->preg_index(1) .\'&modifier=1\'
);
$wp_rewrite->rules = $cpt_rules + $wp_rewrite->rules;
}
}
}
有人告诉我,使用插件类可能是解决这个问题的方法,但我不知道如何解决。