我只是尝试用我放入单独 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>
任何见解将不胜感激。
一个问题是
get_the_title()
旨在用于主题模板,而不是 AJAX 请求。您可能需要将帖子的 ID 作为请求中的参数传递,然后将其传递给函数:
data: {
'action':'example_ajax_request',
'post_id': <?php echo (int) get_the_ID() ?>,
},
<div><?php echo get_the_title( (int) $_POST['post_id'] ); ?></div>
当然,这只适用于帖子/页面。如果您想要 site 标题,那是不同的功能。
也可能存在一些错误导致 AJAX 请求失败,因此 确保
WP_DEBUG
已启用,并在请求后检查 PHP 错误日志。
您还应该检查浏览器开发工具,查看对请求的原始 HTTP 响应,以防包含任何线索。另外,使用
console.log( response )
而不是 response.responseJSON
,以防 JSON 解析失败。