wordpress ajax调用单个帖子

时间:2015-07-02 21:52:55

标签: javascript php jquery ajax wordpress

我试图在我的wordpress循环中进行ajax调用,基本上我想在点击标题后在div的主页中加载帖子的内容。 调用ajax似乎工作,但我有问题,加载整个页面,我想只加载具有特定id的div的内容。

这是我的代码:index.php

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <a class="post-link" rel="<?php the_ID(); ?>" href="<?php the_permalink(); ?>">
       <?php the_title(); ?> 
    </a>
    <?php endwhile; endif; ?>
<div id="single-post-container"></div>

这是single.php

<?php $post = get_post($_POST['id']); ?>
    <div id="single-post post-<?php the_ID(); ?>">
    <?php while (have_posts()) : the_post(); ?>
                <?php the_title();?>
                <?php the_content();?>
    <?php endwhile;?> 
    </div>

这是js

   jQuery(document).ready(function(){

        jQuery.ajaxSetup({cache:false});
        jQuery(".post-link").click(function(){
            var post_link = jQuery(this).attr("href");

            jQuery("#single-post-container").html("content loading");
            jQuery("#single-post-container").load(post_link);
        return false;
        });

    });

我试图在post_link之后添加id#single-post,如下所示:

  jQuery("#single-post-container").load(post_link #single-post);

但是当我运行gulp时,我有一个阻止我的错误。 我怎样才能达到这个范围?

有人可以给我一个帮助或建议吗?

2 个答案:

答案 0 :(得分:1)

认为这可能是答案,但前提是我已正确理解问题:

什么是post_link?你的AJAX通话叫什么实际网址?如果您只是调用single.php,那么首先要做的就是调用header() - 因此您可能会获得整个页面。看看你的index.php我认为这可能是正在发生的事情。

如果是这样的话。你需要查找如何在WordPress中进行AJAX调用。你必须添加一个类似add_action('wp_ajax_my_action',mycallback)的AJAX回调。然后你的回调可以通过get_post()获得单个帖子。您的AJAX调用应该调用的实际URL是:

YOURDOMAIN /可湿性粉剂管理员/管理-ajax.php行动= my_action&安培; POST_ID = THEPOSTID。您可以使用admin_url()来帮助您构建正确的URL。

您可能需要将THEPOSTID注入JavaScript。使用wp_localize_script。或者您可以将其添加为index.php中的属性并将其添加到JavaScript中。

然后你的回调 - mycallback() - 可以使用get_post()获取帖子并返回它而不会有所有的页面漏洞。 E.g:

function mycallback()
{

   $postId = $_GET['post_id'];
   $postRow = get_post($postId);
   echo $postRow->post_content; 
   wp_die();
}

也许找一些关于如何使用WordPress进行AJAX的例子?例如http://wptheming.com/2013/07/simple-ajax-example/

更新:

添加了wp_die();在AJAX回调结束时。你需要做到这一点,以阻止WordPress吐出很多页面bumf。实际上,这可能是您的single.php中缺少的部分。 Stil,或许最好使用admin-ajax.php来做它。

答案 1 :(得分:0)

如果这可以帮助某人,我用这个代码解决了

//take the permalink of the single post
var post_permalink = locations[i].post_url + " #single-post";

// load post in the div
jQuery("#single-post-container").html("content loading");
jQuery('#single-post-container').load(post_permalink);
无论如何,谢谢大家