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