如何在Wordpress中将AJAX请求附加到某个帖子ID?

时间:2017-11-24 15:17:12

标签: ajax wordpress

我是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,帖子标题,帖子元数据等结果。

2 个答案:

答案 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以查看您可以获得的所有数据。