WordPress重写URL以访问插件页面

时间:2011-09-03 20:27:51

标签: wordpress url plugins rewrite

您好我正在尝试通过自定义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);  
}

任何想法我做错了什么?

提前致谢,

克里斯

2 个答案:

答案 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)动作中添加重写规则,否则它会在刷新规则时被删除(因为如上所述它们不是存储在数据库中。)