我是AJAX的新手,所以我无法应付这样的事情。
例如,我有一些功能:
add_action('wp_ajax_nopriv_test', 'some_fun');
add_action('wp_ajax_test', 'some_fun');
function some_fun() {
$pt = get_the_title( $post_id = 1061);
echo $pt;
wp_die();
}
我的AJAX方面看起来像这样:
jQuery(document).ready(function($) {
$('.bbb2').click(function () {
$.ajax({
type: 'GET',
url: ajaxurl,
data: {action : 'test'},
success: function (data) {
$('.result_area').html(data);
}
});
});
})
因此,当我按下Class = .bbb2的按钮时,我的AJAX请求会返回ID = 1061的帖子的标题,并在DIV中显示它,类别为:result_area。
但是,如果我想要检索当前的ID /标题/等,该怎么办?我的帖子?我不想像$ post_id = 1061那样指定它,我只想让它成为$ post_id。如何强制我的AJAX请求才能看到此ID?
我只想进入特定页面,点击按钮,然后获得帖子ID,帖子标题,帖子元数据等结果。
答案 0 :(得分:0)
实现ajax对于你到目前为止所做的事情来说非常正确。但是,添加nonce验证很有用,即 check_ajax_referer();
add_action('wp_ajax_nopriv_test', 'some_fun');
add_action('wp_ajax_test', 'some_fun');
function some_fun() {
$post_id = filter_input( INPUT_POST, 'post_id' );
$pt = get_the_title( $post_id );
wp_send_json($pt); //Use WP send json function
wp_die();
}
在 jquery 端,您的实现几乎是正确的,但不是将静态post_id值传递给ajax函数,您可以从ajax本身发布post_id。
为此你需要从你的“.bbb2”按钮存在的帖子中提取post_id (再次这只是一个例子,有很多方法可以将这些数据传递给jquery) For例如:
<a href="javascript:void(0);" class="bbb2" data-postid="<?php echo get_the_id(); ?>">Click Here</a>
现在在上面的锚标记中,我已将数据作为“postid”传递。现在使用该数据来提取post id并通过ajax传递post_id。
见下文:
jQuery(function($) {
$('.bbb2').click(function() {
var post_id = $(this).data('postid'); //Getting post ID from anchor tag
//Compile the post data to retrieve
var postData = {
action: 'test',
post_id: post_id,
}
//Make AJAX post call ( USE POST instead of GET to post data and get data in return)
$.post( ajaxurl, postData ).done(function(result) {
$('.result_area').html(result);
});
});
});
现在,由于您可以访问ajax函数中的post_id,因此您可以提取与该帖子的任何信息关系。
如果我误解了或者您对WP中的ajax调用有任何疑问,请告诉我。
答案 1 :(得分:0)
好的,所以我拼凑了一个我躺在周围的类似代码的答案。对于Button,添加一个数据属性,其中包含当前页面ID的值:
<button class="bbb2" data-id="<?php the_ID(); ?>">
Get Post Data
</button>
然后使用单击函数获取该ID并将其传递给rest函数:
$('.bbb2').click(function () {
var thisID = $(this).data('id');
restPage(thisID);
});
这里有神奇的休息功能:
function restPage(id){
jQuery.ajax({
async: true,
global: false,
cache: false,
url: 'http://www.yoursite.com/wp-json/wp/v2/posts/' + id,
type: "GET",
dataType: "json",
header: "Content-Type: application/json",
}).done(function(data){
//if data is returned or not
if (!data) {
alert("No Data Found");
}else{
var title = data.title.rendered;
var pageContent = data.content.rendered;
console.log(title);
console.log(pageContent);
}//END if (!data)
});//END .done()
}//END restPage()
只需将数据记录到控制台,但您可以随意使用它。请查看http://www.yoursite.com/wp-json/wp/v2/posts/1061以查看您可以获得的所有数据。