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-handlerhttp://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


Total views.

© 2013 - 2018. All rights reserved.

Powered by Hydejack v6.6.1