rewrite file to wordpress

时间:2012-05-22 作者:greenbandit

我的插件目录中有一个端点。php,需要这样重写:

http://domain.com/API/endpoint.php
这是我使用的代码:

add_rewrite_rule( \'API/endpoint.php\', \'myplugin-path/endpoint.php\', \'top\' );
当我打印$wp_rewrite 全球我得到了这个:

[non_wp_rules] => Array
    (
        [API/endpoint.php] => http://mydomain/myplugin-path/endpoint.php
    )
但还是不行,有什么想法吗?

1 个回复
最合适的回答,由SO网友:Eugene Manuilov 整理而成

Wordpress重写机制以不同的方式工作,不像。htaccess重写规则。有关它的更多信息,请访问codex (Rewrite API, WP_Rewrite, 等等)。但快速解决方法可能是:

首先,我们需要注册查询变量并重写规则:

function myplugin_add_query_var( $vars ) {
    $vars[] = \'myplugin_api\';
    return $vars;
}
add_filter( \'query_vars\', \'myplugin_add_query_var\' );

function myplugin_update_rewrite_rules( $rules ) {
    $newrules = array();
    $newrules[\'api\\/endpoint\\.php$\'] = \'index.php?pagename=api&myplugin_api=1\';
    return $newrules + $rules;
}
add_filter( \'rewrite_rules_array\', \'myplugin_update_rewrite_rules\' );
要完成重写规则的注册,我们需要刷新插件激活/停用的规则:

function myplugin_activate() {
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, \'myplugin_activate\' );

function myplugin_deactivate() {
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, \'myplugin_deactivate\' );
使重写规则正常工作的一种魔法:D

function myplugin_a_piece_of_magic_on_init() {
    global $wp_rewrite;
    $wp_rewrite->use_verbose_page_rules = !preg_match( "/api\\/endpoint\\.php$/i", $_SERVER[\'REQUEST_URI\'] );
}
add_action( \'init\', \'myplugin_a_piece_of_magic_on_init\' );
最后检查我们的查询var是否显示在wp操作上:

function myplugin_check_query_var( $wp ) {
    if ( array_key_exists( \'myplugin_api\', $wp->query_vars ) ) {
        // do api stuff here ...
        exit;
    }
}
add_action( \'wp\', \'myplugin_check_query_var\' );

结束

相关推荐

Communicate between plugins

我已经创建了两个WordPress插件。如果两个插件都安装了,那么这两个插件之间就可以进行一些有益的合作。那么我的问题是:让他们合作的最佳方式是什么?如何检测某个插件是否已启用?如何传输信息?我想我可以用globals,但有更好的方法吗?