【问题标题】:wp posts ajax load morewp 发布 ajax 加载更多
【发布时间】:2016-01-12 09:58:32
【问题描述】:

我尝试使用 ajax 加载更多帖子。我看到在线和 stackoverflow 中有很多插件和解决方案。但对我没有任何工作。实际上我想在没有插件的情况下做到这一点。所以我可以在需要此代码的不同页面存档或不同页面模板中使用它。

这是我从 stackoverflow 的另一个问题中得到的代码。我的分数较低,所以我不能在那里发表评论。

这是我的 index.php 代码:

<?php get_header(); ?>

<div class="ajax-posts">
<?php 
    $postsPerPage = 3;
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $postsPerPage,
    );
    $loop = new WP_Query($args);

    while ($loop->have_posts()) : $loop->the_post();
?>
<h2><?php the_title(); ?></h2>
<?php
    endwhile; 
    echo '<a id="more_posts" href="#">Load More</a>';
    wp_reset_postdata(); 
?>
</div>
<script type="text/javascript">
    var ajaxUrl = "<?php echo admin_url('admin-ajax.php')?>";
    var page = 1;.
    var ppp = 3;

    $("#more_posts").on("click",function(){ 
        $("#more_posts").attr("disabled",true);
        $.post(ajaxUrl, {
            action:"more_post_ajax",
            offset: (page * ppp) + 1,
            ppp: ppp
        }).success(function(posts){
            page++;
            $(".ajax-posts").append(posts); // CHANGE THIS!
            $("#more_posts").attr("disabled",false);
        });

   });

</script>
<?php get_footer(); ?>

这是functions.php代码

<?php 
function more_post_ajax(){
    $offset = $_POST["offset"];
    $ppp = $_POST["ppp"];
    header("Content-Type: text/html");

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $ppp,
        'offset' => $offset,
    );

    $loop = new WP_Query($args);
    while ($loop->have_posts()) { $loop->the_post();
       the_title();
    }
    exit; 
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');
?>

我不知道为什么帖子无法加载或无法加载更多链接。我希望有人能提供帮助。

参考:https://stackoverflow.com/a/31588401/5545813

【问题讨论】:

  • 您好@Nozifel 我已经尝试过您的回答,但无法解决我的问题。请检查我的代码,让我知道我做错了什么!
  • 您的请求后收到回复了吗?我建议你先改变'退出;'去死();'我等你的答案。
  • 我用过 die();但注意到回应!
  • 我尝试了我的配置,删除'header("Content-Type: text/html");',然后告诉我当你加载页面时你的控制台中是否有任何js错误。删除标题并将 $ 更改为 jQuery 后,它对我有用。

标签: php jquery ajax wordpress


【解决方案1】:

更好的方法是返回一个带有你的帖子标题的数组。然后在成功后显示它们。如果数组长度

$array_return = array();
$loop = new WP_Query($args);
while ($loop->have_posts()) { $loop->the_post();
$content = "<h1>" . get_the_title() . "</h1>";
$content .= "<div>" . get_the_content() . "</div>";
$content .= "<div>" . get_field("your_field") . "</div>";
$array_return[] = $content;
}
echo json_encode( $array_return );
die();

在你的 js 脚本中,

var posts = JSON.parse(posts);
for( var i = 0; i < posts.length; i++ )
    $(".ajax-posts").append(posts[i]);

if( posts.length < ur_ppp )
    $("#more_posts").fadeOut();

类似的东西

【讨论】:

  • 我想要的不仅仅是标题。我的帖子有标题、内容和 acf 字段
  • 我做错了。我编辑我的代码(错误:json_encoRe => json_encode)
  • 我如何使用 the_content();the_field('field_name'); 在带有 array_return[] 的循环内?
  • 非常感谢您的代码和努力,但我认为您的 js 脚本有问题。 for 循环错过了 {} 括号?? for( var i = 0; i &lt; posts.length; i++ ){ // Code Here ? }
  • for( var i = 0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多