栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在WordPress中加载更多帖子Ajax按钮

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在WordPress中加载更多帖子Ajax按钮

更新24.04.2016。

我已经在我的页面https://madebydenis.com/ajax-load-posts-on-
wordpress/
上创建了关于在“二十十六岁”主题上实现该主题的教程,请随时查看:)

编辑

我已经在二十一十五测试了它,并且它正在工作,所以它应该对您有用。

index.php中 (假设您想在主页上显示帖子,但是即使将其放在页面模板中也可以使用):

    <div id="ajax-posts" >        <?php $postsPerPage = 3; $args = array(         'post_type' => 'post',         'posts_per_page' => $postsPerPage,         'cat' => 8 ); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post();        ?>         <div >     <h1><?php the_title(); ?></h1>     <p><?php the_content(); ?></p>         </div>         <?php     endwhile;        wp_reset_postdata();         ?>    </div>    <div id="more_posts">Load More</div>

这将输出类别8中的3篇文章(我在该类别中有文章,因此我使用了它,可以使用任何想要的内容)。您甚至可以查询您所在的类别

$cat_id = get_query_var('cat');

这将为您提供要在查询中使用的类别ID。您可以将其放在加载器中(加载更多div),然后使用jQuery拉

<div id="more_posts" data-category="<?php echo $cat_id; ?>">>Load More</div>

并拉类别

var cat = $('#more_posts').data('category');

但是现在,您可以忽略此问题。

我添加的 functions.php中的 下一个

wp_localize_script( 'twentyfifteen-script', 'ajax_posts', array(    'ajaxurl' => admin_url( 'admin-ajax.php' ),    'noposts' => __('No older posts found', 'twentyfifteen'),));

对现有的权利

wp_localize_script
。这将加载WordPress自己的admin-
ajax.php,以便我们在ajax调用中调用它时可以使用它。

在functions.php文件的末尾,我添加了将加载您的帖子的函数:

function more_post_ajax(){    $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 3;    $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0;    header("Content-Type: text/html");    $args = array(        'suppress_filters' => true,        'post_type' => 'post',        'posts_per_page' => $ppp,        'cat' => 8,        'paged'    => $page,    );    $loop = new WP_Query($args);    $out = '';    if ($loop -> have_posts()) :  while ($loop -> have_posts()) : $loop -> the_post();        $out .= '<div >     <h1>'.get_the_title().'</h1>     <p>'.get_the_content().'</p>         </div>';    endwhile;    endif;    wp_reset_postdata();    die($out);}add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax');add_action('wp_ajax_more_post_ajax', 'more_post_ajax');

在这里,我在数组中添加了分页键,以便循环可以在加载帖子时跟踪您所在的页面。

如果您已在加载程序中添加了类别,则会添加:

$cat = (isset($_POST['cat'])) ? $_POST['cat'] : '';

而不是8,您输入了

$cat
。这将在
$_POST
数组中,您将可以在ajax中使用它。

最后一部分是ajax本身。在 functions.js中, 我放入了

$(document).ready();
环境

var ppp = 3; // Post per pagevar cat = 8;var pageNumber = 1;function load_posts(){    pageNumber++;    var str = '&cat=' + cat + '&pageNumber=' + pageNumber + '&ppp=' + ppp + '&action=more_post_ajax';    $.ajax({        type: "POST",        dataType: "html",        url: ajax_posts.ajaxurl,        data: str,        success: function(data){ var $data = $(data); if($data.length){     $("#ajax-posts").append($data);     $("#more_posts").attr("disabled",false); } else{     $("#more_posts").attr("disabled",true); }        },        error : function(jqXHR, textStatus, errorThrown) { $loader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown);        }    });    return false;}$("#more_posts").on("click",function(){ // When btn is pressed.    $("#more_posts").attr("disabled",true); // Disable the button, temp.    load_posts();});

保存它,测试它,然后就可以了:)

图像作为证明(不要介意低劣的样式,它很快就完成了)。帖子内容也很乱

更新

对于“无限负载”,而不是按钮上的click事件(只需使用使其不可见

visibility: hidden;
),您可以尝试使用

$(window).on('scroll', function () {    if ($(window).scrollTop() + $(window).height()  >= $(document).height() - 100) {        load_posts();    }});

load_posts()
当您离页面底部100px时,这应该运行该函数。对于我网站上的教程,您可以添加检查以查看帖子是否正在加载(以防止两次触发Ajax),并且可以在滚动到达页脚顶部时触发它

$(window).on('scroll', function(){    if($('body').scrollTop()+$(window).height() > $('footer').offset().top){        if(!($loader.hasClass('post_loading_loader') || $loader.hasClass('post_no_more_posts'))){     load_posts();        }    }});

现在,在这些情况下,唯一的缺点是,你永远无法滚动,它的值

$(document).height() -100
或者
$('footer').offset().top
出于某种原因。如果发生这种情况,只需增加滚动位置即可。

您可以通过将

console.log
s放入代码中并在检查器中查看其抛出的内容轻松地对其进行检查

$(window).on('scroll', function () {    console.log($(window).scrollTop() + $(window).height());    console.log($(document).height() - 100);    if ($(window).scrollTop() + $(window).height()  >= $(document).height() - 100) {        load_posts();    }});

并相应地进行调整;)

希望这会有所帮助:)如果您有任何疑问,请问。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号