2011年01月12日 73条评论

使用jQuery的GET请求功能获取WP主题目录地址

大家都知道,在WordPress的主题里面要获取主题所在目录很简单,一个函数搞定:get_bloginfo('template_directory')。但是,在 js 文件里面就不是那么简单了(真正懂 js 的除外)。

我们经常用的 willin 出品的 ajax 评论提交就用到了这个,需要定位 ajax 提交 url 目标:comments-ajax.php 文件,而这个文件是在所用主题目录里面。willin 用的是 js 方法,大概是先获取 comments-ajax.js 文件的 url,然后替换“comments-ajax.js”为“comments-ajax.php”。代码如下:(截取自 willin 的 ajax 评论提交文件)

var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
	var js_url = document.getElementsByTagName('script')[i].src,
			got = js_url.indexOf('/comments-ajax.js'); i++ ;
}
var ajax_php_url = js_url.replace('/comments-ajax.js','/comments-ajax.php');

代码中 ajax_php_url 变量就是了。

前段时间我也稍微玩了下 jQuery 的 Ajax 请求,所以对 Ajax 请求中的 GET 请求了解了点,想想也可以通过 GET 请求获取 WordPress 的 get_bloginfo('template_directory') 函数的值。

我在本地测试了一下,OK了,也用到自己折腾的 Ajax 评论提交里面,具体效率方面我就不知道了,我对 js 一知半解。下面是方法

0. 前提:加载 jQuery 库

1. 在主题的 functions.php 里面添加如下函数代码:显示 get_bloginfo('template_directory') 的值

function theme_file_url(){
	if( isset($_GET['action'])&& $_GET['action'] == 'theme_file_url'  ){
		nocache_headers();	//(FIX for IE)
		echo get_bloginfo('template_directory');
		die();
	}
}
add_action('init', 'theme_file_url');

2. jQuery 代码:用 GET 请求功能获取 theme_file_url() 的数据(data)

var ajax_php_url = '';
$.get('./?action=theme_file_url',function(data){ajax_php_url = data+'/comments-ajax.php';});

就这样,ajax_php_url 的值就是 http://你所用的主题目录/comments-ajax.php

至于哪种方法比较好我不知道,反正多个方法,而且这个 get 是异步传输的,所以参数会有延迟,不适合打开页面就要使用的变量

2011.1.13 Update:在评论里通过跟几位朋友讨论后得出,这个方法稍微有点蛋疼,不够直接,不过这篇所说方法其实可作为异步加载内容用。js 高手 Qiqiboy 也给出了 2 个常用的方法,我在下一篇说一下和贴一下。

zww
or
oooo

“使用jQuery的GET请求功能获取WP主题目录地址”有73条评论

  1. KARONL says:

    不错的方法,等有空试试。 :smile:

    1. zwwooooo says:

      不是很推荐,最好用willin的方法。

  2. fblue says:

    还是直接遍历获取script再处理的快些,用ajax怎么也是多了一次请求,呵呵,

    1. zwwooooo says:

      @fblue
      嗯嗯,我用回js方法了。

  3. willin says:

    js 和 php 之間傳遞變量有幾種方法, 直接寫進 php 最快, 用 js 會比 jQ 快, 其它還有 cookie...

    1. zwwooooo says:

      @willin
      我没去系统学习,所以不太懂,只会简单用用

发表评论

昵称 *

网址

B em del U Link Code Quote