我需要在我的插件中添加一个重写规则,并将其与我的代码一起分发。如果我把规则放进去,一切都很好。htaccess在WordPress根文件夹中,但我需要使用我的规则分发插件。
我试着放一个。htaccess在插件文件夹中,并尝试使用add_rewrite_rule 功能,但也不起作用。
这里是。在WordPress根文件夹中正常工作但在我的插件文件夹中不工作的htaccess代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1
</IfModule>
我在插件中尝试了以下代码,但都不起作用:
add_filter( \'query_vars\', \'add_query_vars\' );
function add_query_vars( $query_vars )
{
$query_vars[] = \'pid\';
return $query_vars;
}
add_action( \'init\', \'add_init\' );
function add_init()
{
$plugin_url = \'the-path-to-my-plugin-folder\';
add_rewrite_rule(\'my-plugin/pages/tp(.*)\\.php\'
, $plugin_url . \'pages/request.php?pid=$matches[1]\',\'top\');
global $wp_rewrite;
$wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}
但我总是得到一个错误,那就是找不到URL。我做错了什么?我怎样才能做我需要的事?我寻找类似的问题,但没有一个能解决我的问题。
最合适的回答,由SO网友:Eugene Manuilov 整理而成
注意:WordPress重写API与Apache重写模块不同。WP重写API不会将请求重定向到另一个URL,它用于解析当前URL并填充query_vars
大堆
问题在于你的第二个参数add_rewrite_rule
函数调用。它必须从index.php?
然后应该有你的论点,比如pid
, 例如:
"index.php?pid=$matches[1]...."
所以你的
add_init
函数应如下所示:
add_action( \'init\', \'wpse8170_add_init\' );
function wpse8170_add_init()
{
add_rewrite_rule(\'my-plugin/pages/tp(.*)\\.php\', \'index.php?pid=$matches[1]\', \'top\');
}
不要忘记通过访问刷新重写规则
Settings
»;
Permalinks
页
进一步阅读: