大家都知道,在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 个常用的方法,我在下一篇说一下和贴一下。
- 本文标题:使用jQuery的GET请求功能获取WP主题目录地址
- 本文链接:https://zww.me/archives/25375
- 发布时间:2011年01月12日 10:18
- 版权声明:除非注明,文章均为 zwwooooo 原创,转载请以链接形式标明本文地址!
不错的方法,等有空试试。
不是很推荐,最好用willin的方法。
还是直接遍历获取script再处理的快些,用ajax怎么也是多了一次请求,呵呵,
@fblue
嗯嗯,我用回js方法了。
js 和 php 之間傳遞變量有幾種方法, 直接寫進 php 最快, 用 js 會比 jQ 快, 其它還有 cookie...
@willin
我没去系统学习,所以不太懂,只会简单用用