您好我正在尝试通过自定义URL访问我的插件,但我无法让插件重定向,它只是找不到404页面,而我想要的是调用page.php。我的插件代码如下(激活和停用插件的功能):
register_activation_hook(__FILE__,'activate');
register_deactivation_hook(__FILE__,'deactivate');
function setRewriteRules()
{
add_rewrite_rule( 'plugin-url/$', '/wp-content/plugins/my-plugin/page.php', 'top' );
}
function activate()
{
setRewriteRules();
global $wp_rewrite;
$wp_rewrite->flush_rules(true);
}
function deactivate()
{
global $wp_rewrite;
$wp_rewrite->flush_rules(true);
}
任何想法我做错了什么?
提前致谢,
克里斯
答案 0 :(得分:2)
首先,给出这样的路径是一个坏主意,因为如果出于任何原因发生任何变化,你的插件/主题就会中断。
Ozh在Hardcoded Paths部分提出了一个很好的建议,直到那些......
其次,使用* query_vars *最有可能会更好。有关如何执行此操作的示例,请查看http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/甚至可能http://planetozh.com/blog/2011/01/pretty-login-url-a-simple-rewrite-api-plugin-example/。
还要检查WP_Rewrite Class,因为它有关于在WordPress中处理URL重写的最佳信息。
第三,您需要将setRewriteRules()
函数挂钩到 init 挂钩,因为第一次刷新规则时,您的规则将被删除。
所以你的代码看起来像这样(没有任何其他更正):
register_activation_hook(__FILE__,'activate');
register_deactivation_hook(__FILE__,'deactivate');
add_action('init', 'setRewriteRules');
function setRewriteRules()
{
add_rewrite_rule( 'plugin-url/$', '/wp-content/plugins/my-plugin/page.php', 'top' );
}
function activate()
{
setRewriteRules();
global $wp_rewrite;
$wp_rewrite->flush_rules(true);
}
function deactivate()
{
global $wp_rewrite;
$wp_rewrite->flush_rules(true);
}
以下是关于刷新重写规则的一些提示......
add_action('admin_init', 'deactivate');
也可能会有所帮助,因此只要加载管理页面,就会刷新它们。答案 1 :(得分:1)
重写未重定向到Wordpress index.php文件的规则将写入.htaccess文件。我认为它们不会存储在数据库中。因此,查看您的代码,如果您的.htaccess文件在激活插件时不可写,则永远不会添加重写规则。
正如Amereservant所写,你需要在init
(或者可能是generate_rewrite_rules
)动作中添加重写规则,否则它会在刷新规则时被删除(因为如上所述它们不是存储在数据库中。)