为什么$_GET在functions.php文件中不起作用?

bhmjp9jg  于 2022-11-28  发布在  PHP
关注(0)|答案(2)|浏览(132)

我的url查询字符串是http://website.local/residences/?status=status2&type=apartments&price=null
当我从我的页面模板中回显$_GET ['status']时,我得到了'status 2',这显然是正确的。但是我试图从我的functions.php中得到这个值,它返回false。我正在使用 AJAX 用下面的函数加载更多的帖子。它应该用$_GET为税务查询得到这个状态值。不知道为什么它只在我的functions.php中返回false。
有什么想法吗?
第一个

e7arh2l6

e7arh2l61#

$_GET不会像您期望的那样工作,因为您试图将其放入 AJAX 回调函数中。
http://website.local/residences/?status=status2&type=apartments&price=null
在上面的url中,只有在加载该url时才能获取参数,但是一旦加载了该url并调用了WP AJAX ,url就会变成http://website.local/wp-admin/admin-ajax.php,其中没有$_GET的参数
因此,您必须在页面加载时收集$_GET,然后将这些$_GET值存储到js对象或HTML数据属性中,然后您需要将这些值传递给js,然后将这些变量作为$_POST传递,并在 AJAX 回调函数中使用$_POST收集它们。

b4lqfgs4

b4lqfgs42#

由于您尝试将其放入 AJAX 回调函数中,因此$_GET将无法按预期方式工作。
因此,我为您提供了一个替代的解决方案,我相信这将有助于您的问题。

您可以通过将下面的函数放入JS文件来获取查询字符串。

function getQueryString() {
    let string = [], hash;
    let hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        string.push(hash[0]);
        string[hash[0]] = hash[1];
    }
    return string;
}

您可以获取let status = getQueryString()["status"];之类的查询字符串的值,并在 AJAX 调用中将其传递给data

function load_more_posts(offset, post_type) {
    let status = getQueryString()["status"];
    $.ajax({
        type: "POST",
        url: WPURLS.ajax_url,
        data: {
            action: "load_more_members",
            offset: offset,
            post_type: post_type,
            status: status
        },
        beforeSend: function (data) {
            $(".load-more-" + post_type).addClass("loading");
        },
        success: function (response) {
            var obj = JSON.parse(response);
            $("." + post_type + "-repeat").append(obj.html);
        },
        error: function (error) {
            console.log("est" + error);
        },
    });
}
$(".load-more-post").on("click tap touch", function (e) {
    e.preventDefault();
    var this_offset = $(this).attr("data-offset");
    load_more_posts(this_offset, "post");
});

现在,您可以在 AJAX 调用中获取值。

add_action('wp_ajax_nopriv_load_more_members', 'load_more_members');
add_action('wp_ajax_load_more_members', 'load_more_members');

function load_more_members()
{
    echo $_POST['status'];
}

相关问题