Old

使用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

声明: 除非注明,ZWWoOoOo文章均为原创,转载请以链接形式标明本文地址
本文地址: http://zww.me/archives/25375

73 comments

  1. Choikit Choikit

    有沙发就要先坐起~

    沙发
  2. 林木木 林木木

    我看willin的代码,感觉是用JavaScript来检测页面加载的标签中有没comments-ajax.js,获取到后正则加载php文件~

    板凳
  3. 林木木 林木木

    http://www.w3school.com.cn/js/jsref_indexOf.asp 看这,应该就是这个~

    地板
  4. ......
  5. 1KARONL KARONL

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

    21楼
  6. fblue fblue

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

    22楼
  7. willin willin

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

    23楼

Leave a Reply