我正在通过jquery / ajax动态加载php文件到Wordpress页面模板中。
我有以下可在本地服务器上运行但当我上传到我的测试站点时,我在加载文件时在控制台中出现404错误。
汇总代码:
var root = location.protocol + '//' + location.host;
$(".button-book").click(function(e) {
e.preventDefault();
$('#container').load(root+'/wp-content/themes/PL14-Base/inc/bookings-swiss.php');
});
您实际上可以看到开发网站here。点击第一个“预订”按钮即可查看问题。
更新: 为了清晰起见,我已将代码更改为使用确切的网址 直接在浏览器中调用时,可以在the correct url找到该文件。
答案 0 :(得分:0)
这是一个php文件吗?如果是,请使用get_template_directory_uri();
助手
var root = location.protocol + '//' + location.host;
$(".button-book").click(function(e) {
e.preventDefault();
$('#container').load('<?php echo get_template_directory_uri(); ?>/inc/loaded-file.php');
});
答案 1 :(得分:0)
我已经设法通过在加载的php文件的顶部使用<?php require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); ?>
来实现此功能,但这是一个肮脏的修复。更愿意知道这样做的正确方法。
答案 2 :(得分:0)
在主插件或函数php中,或者您将执行以下操作将全局变量附加到某个脚本
$main_js_namespace = array(
'ajaxURL' => admin_url('admin-ajax.php'),
'data' => array(
'action' => '',
'method' => '',
'post' => '',
)
);
// script handler, javascript global variable name,
wp_localize_script('bec_script_handle','gVariable',$main_js_namespace);
此类类处理ajax调用。
class ajaxClass {
public function __construct() {
// ajaxClass can be whatever you want..
add_action('wp_ajax_nopriv_ajaxClass', array($this, 'handle_ajax'));
add_action('wp_ajax_ajaxClass', array($this, 'handle_ajax'));
}
// this simply handle the routing of the functions.
public function handle_ajax() {
if(isset($_POST['method'])) {
$method = $_POST['method'];
if(method_exists($this, $method)) {
if(isset($_POST['post']) && $_POST['post'] != 'false') {
parse_str(stripslashes($_POST['post']), $post);
$request = call_user_func(array($this, $method), $post);
echo (is_array($request)) ? json_encode($request) : $request;
} else {
$request = call_user_func(array($this, $method));
echo (is_array($request)) ? json_encode($request) : $request;
}
} else {
$json['success'] = false;
$json['msg'] = __CLASS__.'::'.$method.' not found, define first! por favor..';
echo json_encode($json);
}
}
exit;
}
/*
* bla
* */
public function someAjaxCall($post){
$toRetun = "whatever Response You Want";
return $toRetun;
}
}
$ajaxClass = new ajaxClass();
//这就是我将如何调用该脚本
// the action we chose
gVariable.data.action = 'ajaxClass';
// whatever method in the ajax class you want to access
gVariable.data.method = 'get_table_schema';
// whatever variable/data you want to pass
gVariable.data.post = 'tableName=' + tableName;
this functions is a async false and ones done give you an object with the result however any other would work.
var getData = function(){
var getData = {};
var setData = function(data) {
getData = data;
};
return function(){
$.ajax({
url: gVariable.ajaxURL,
type: "post",
async: false,
dataType:'json',
data:becGlobal.data,
success: function (data) {
setData(data);
},
error : function (data) {
setData(data);
}
});
return getData;
}
}
getData()();
</script>