我知道我的问题似乎很幼稚,但我无法解决。
为什么要这样做:
function my_f() {
$sss = 'some data';
echo ($sss);
die();
}
add_action('wp_ajax_nopriv_my_f', 'my_f');
add_action('wp_ajax_my_f', 'my_f');
然后:
jQuery(document).ready(function($) {
$('.test_btn').click(function() {
$.ajax({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
data: {action: 'my_f'},
})
.done(function(data) {
console.log(data);
})
.fail(function() {
console.log("error");
})
});
});
我在控制台中看到“一些数据”
但是当我尝试对post meta或post id进行相同操作时,它不起作用吗?
function my_fun() {
global $post;
$sss = get_post_meta( $post->ID, 'some_meta_id', true );
echo ($sss);
die();
}
add_action('wp_ajax_nopriv_my_fun', 'my_fun');
add_action('wp_ajax_my_fun', 'my_fun');
答案 0 :(得分:0)
因为该范围中没有全局$post
。您需要先设置全局$post
变量,然后才能使用它。 Ajax函数不在特定的帖子或页面上运行。因此,您需要准备包含WP_Query
,get_post()
等内容的帖子。
您可以通过在meta_key some_meta_id
上查找带有值的帖子,然后将ID烘焙到函数中来进行测试;说出帖子ID 123
-如果您要进行get_post_meta( 123, 'some_meta_id', true )
;应该可以。
编辑:
根据您的评论,因为您是通过单击按钮来调用的,因此只需将ID作为属性传递给.test_btn
:
<a href="#" class="test_btn" data-attr-id="<?php echo get_the_ID(); ?>">Click Me</a>
然后将其传递到您的ajax数据中:
var post_id = $(this).attr('data-attr-id');
data: {action: 'my_f', post_id: post_id },
现在,在函数内部,您应该可以访问变量$_POST['post_id']
,其中将包含您传递的帖子ID。