每当使用 WordPress 函数时,WordPress AJAX 响应都会返回“false”

问题描述 投票:0回答:1

我只是尝试用我放入单独 PHP 文件中的内容替换页面上元素的内容。一切似乎都正常,只要我调用的内容不包含任何 WordPress 功能;即:

<div><?php echo get_the_title(); ?></div>

当我使用 WordPress 功能时,我收到“错误”的响应。只是

false
;而不是
<div>false</div>
。这也不是我想要的结果。我忽略了其中的一个基本部分。

这是我正在处理的相关部分:

functions.php

require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';


//Load jQuery
wp_enqueue_script('jquery');

//Define AJAX URL
function myplugin_ajaxurl() {
    echo '<script type="text/javascript">
    var ajaxurl = "' . admin_url('admin-ajax.php') . '";
    </script>';
}
add_action('wp_head', 'myplugin_ajaxurl');

//The Javascript
function add_this_script_footer(){ ?>

    <script>
    jQuery(document).ready(function($) {
        // This does the ajax request (The Call).
        $( "#button_leadership" ).click(function() {
            $.ajax({
                url: ajaxurl, // Since WP 2.8 ajaxurl is always defined and points to admin-ajax.php
                data: {
                    'action':'example_ajax_request' // This is our PHP function below
                },
                complete: function(response) {
                    // This outputs the result of the ajax request (The Callback)
                    document.getElementById("ajax-container-team-tiles").textContent = "";
                    document.getElementById("ajax-container-team-tiles").innerHTML = response.responseJSON;
                    console.log(response);
                },
                error: function(errorThrown){
                    window.alert(errorThrown);
                }
            });
        });
    });
    </script>

    <?php }
    add_action('wp_footer', 'add_this_script_footer');
    
    //The PHP
    function example_ajax_request() {
        $filesystem = new WP_Filesystem_Direct( true );
        $someThing = $filesystem->get_contents( get_stylesheet_directory_uri() . '/ajax-calls/addition.php');
        wp_send_json($someThing);
    }
    
    // This bit is a special action hook that works with the WordPress AJAX functionality.
    add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
    add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

addition.php:

<div><?php echo get_the_title(); ?></div>

任何见解将不胜感激。

ajax wordpress
1个回答
0
投票

一个问题是

get_the_title()
旨在用于主题模板,而不是 AJAX 请求。您可能需要将帖子的 ID 作为请求中的参数传递,然后将其传递给函数:

函数.php

data: {
    'action':'example_ajax_request',
    'post_id': <?php echo (int) get_the_ID() ?>,
},

添加.php

<div><?php echo get_the_title( (int) $_POST['post_id'] ); ?></div>

当然,这只适用于帖子/页面。如果您想要 site 标题,那是不同的功能。

也可能存在一些错误导致 AJAX 请求失败,因此 确保

WP_DEBUG
已启用,并在请求后检查 PHP 错误日志。

您还应该检查浏览器开发工具,查看对请求的原始 HTTP 响应,以防包含任何线索。另外,使用

console.log( response )
而不是
response.responseJSON
,以防 JSON 解析失败。



附注有一个专门针对 WordPress 的 Stack Exchange 网站,您通常会在那里得到更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.