wordpress , 怎样直接请求插件代码
在wordpress插件中有些页面需要http可以访问,例如ajax,restful service。
最简单的方法是引用wp-config.php这个文件。
但是这样做也有局限性:
wordpress2.6之后,允许移动wp-conetent文件夹(http://willnorris.com/2009/05/wordpress-plugin-pet-peeve-hardcoding-wp-content),wp-config.php也不一定就在站点根目录下,所以你的引用代码可能不适合所有wordpress站点。
第二种方法则是较为简单:使用parse_request
通过parse_request这个action来在wordpress流程之前处理请求,并且使用exit来终止后续默认的wordpress处理。
示例代码:
function my_plugin_parse_request($wp) {
// only process requests with "my-plugin=ajax-handler"
if (array_key_exists('my-plugin', $wp->query_vars) && $wp->query_vars['my-plugin'] == 'ajax-handler') {
header('Content-Type: text/plain');
global $wp;
if(isset($wp)){
echo "got wp";
// print_r($wp);
$cats = get_categories('orderby=count&order=desc');
print_r($cats);
}
exit;
}
}
add_action('parse_request', 'my_plugin_parse_request');
function my_plugin_query_vars($vars) {
$vars[] = 'my-plugin';
return $vars;
}
add_filter('query_vars', 'my_plugin_query_vars');
上面的例子可通过http://example.com/index.php?my-plugin=ajax-handler 或 http://example.com/?my-plugin=ajax-handler 来访问。可以看到,$wp,get_categories都可以使用。
第三种方法:使用wp这个action
与第二种不同的是,action这个’wp’是在wordpress默认流程处理之后的流程。
第四种方法:使用WP_Rewrite http://codex.wordpress.org/Function_Reference/WP_Rewrite
这种方法很强大,但是也比较复杂,因为考虑到其他插件作者可能或者用户有可能与你定义的permalink冲突,你就要处理这些情况。
各种用法对于不同需求各有用途。
参见:
http://willnorris.com/2009/06/wordpress-plugin-pet-peeve-2-direct-calls-to-plugin-files

