在functions.php和AJAX请求中发布元

时间:2018-08-02 21:45:51

标签: jquery ajax wordpress

我知道我的问题似乎很幼稚,但我无法解决。

为什么要这样做:

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');

1 个答案:

答案 0 :(得分:0)

因为该范围中没有全局$post。您需要先设置全局$post变量,然后才能使用它。 Ajax函数不在特定的帖子或页面上运行。因此,您需要准备包含WP_Queryget_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。