Wordpress,jquery加载php文件未找到

时间:2014-04-01 12:58:06

标签: jquery ajax wordpress

我正在通过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找到该文件。

3 个答案:

答案 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>