前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >wordpress实现 ajax 分页加载

wordpress实现 ajax 分页加载

作者头像
李维亮
发布于 2021-07-09 03:32:50
发布于 2021-07-09 03:32:50
1.3K00
代码可运行
举报
文章被收录于专栏:李维亮的博客李维亮的博客
运行总次数:0
代码可运行

实现原理

由于我们可以在后台使用wp query来输出文章列表,所以我们并不需要文章分页的入口,砍掉了分页入口也避免了搜索引擎抓取这些页面。我们只需要在AJAX 执行的过程中向后台传递一个分页参数,就可以返回这个分页上的文章列表。再返回文章列表的时候,我们还需要返回下一分页的页码,当然如果不是最后一页的话。

鉴于wp query有着丰富的参数,我们可以通过转递指定的参数来控制文章列表的输出,使之可以在分类、标签等归档正常使用。

实现方法

你需要修改的地方一共有2处,一处是包裹你文章列表的容器,一处是根据的文章列表的样式跳转输出结构。

文章结构输出函数,这个要根据你自己的主题进行修改,在修改的过程中要注意不能使用直接打印结果的函数,如果你不知道如何修改,那往后的内容也没必要看了。其实服务器端输出文章信息的json,然后用JS重新组装列表要更好些,考虑到目标人群,在服务器端生产文章列表的学习成本要小一些,这里就在服务器端直接生成文章列表了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fa_make_post_section(){
    global $post;
    $post_section = '<h2 class="block-title post-featured"><a href="' . get_permalink() . '">' . get_the_title() . '</a></h2>';
    return $post_section;
}

这个是ajax 加载列表的服务器端函数,无需修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_action('wp_ajax_nopriv_fa_load_postlist', 'fa_load_postlist_callback');
add_action('wp_ajax_fa_load_postlist', 'fa_load_postlist_callback');
function fa_load_postlist_callback(){
    $postlist = '';
    $paged = $_POST["paged"];
    $total = $_POST["total"];
    $category = $_POST["category"];
    $author = $_POST["author"];
    $tag = $_POST["tag"];
    $search = $_POST["search"];
    $year = $_POST["year"];
    $month = $_POST["month"];
    $day = $_POST["day"];
    $query_args = array(
        "posts_per_page" => get_option('posts_per_page'),
        "cat" => $category,
        "tag" => $tag,
        "author" => $author,
        "post_status" => "publish",
        "post_type" => "post",
        "paged" => $paged,
        "s" => $search,
        "year" => $year,
        "monthnum" => $month,
        "day" => $day
    );
    $the_query = new WP_Query( $query_args );
    while ( $the_query->have_posts() ){
        $the_query->the_post();
        $postlist .= fa_make_post_section();
    }
    $pre = $postlist ? 200 : 500;
    wp_reset_postdata();
    $next = ( $total > $paged )  ? ( $paged + 1 ) : '' ;
    echo json_enpre(array('pre'=>$pre,'postlist'=>$postlist,'next'=> $next));
    die;
}

加载更多的按钮,替代你之前的分页函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fa_load_postlist_button(){
    global $wp_query;
    if (2 > $GLOBALS["wp_query"]->max_num_pages) {
        return;
    } else {
        $button = '<button id="fa-loadmore" class="button button-more"';
        if (is_category()) $button .= ' data-category="' . get_query_var('cat') . '"';

        if (is_author()) $button .=  ' data-author="' . get_query_var('author') . '"';

        if (is_tag()) $button .=  ' data-tag="' . get_query_var('tag') . '"';

        if (is_search()) $button .=  ' data-search="' . get_query_var('s') . '"';

        if (is_date() ) $button .=  ' data-year="' . get_query_var('year') . '" data-month="' . get_query_var('monthnum') . '" data-day="' . get_query_var('day') . '"';

        $button .= ' data-paged="2" data-action="fa_load_postlist" data-total="' . $GLOBALS["wp_query"]->max_num_pages . '">加载更多</button>';

        return $button;
    }
}

调用方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php echo fa_load_postlist_button();?>

js代码,需要加载jquery库,方法就不说了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jQuery(document).on("click", "#fa-loadmore", function() {
    var _self = jQuery(this),
        _postlistWrap = jQuery('.blockGroup'),
        _button = jQuery('#fa-loadmore'),
        _data = _self.data();
    if (_self.hasClass('is-loading')) {
        return false
    } else {
        _button.html('加载中 o(∩_∩)o');
        _self.addClass('is-loading');
        jQuery.ajax({
            url: '/wp-admin/admin-ajax.php',//注意该文件路径
            data: _data,
            type: 'post',
            dataType: 'json',
            success: function(data) {
                if (data.pre == 500) {
                    _button.data("paged", data.next).html('加载更多');
                    alert('服务器正在努力找回自我  o(∩_∩)o')
                } else if (data.pre == 200) {
                    _postlistWrap.append(data.postlist);
                    if (data.next) {
                        _button.data("paged", data.next).html('加载更多')
                    } else {
                        _button.remove()
                    }
                }
                _self.removeClass('is-loading')
            }
        })
    }
});

本功能可完美用户各个文章列表,如果你添加了自定义文章类型则代码需要相应修改。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WordPress文章归档页面分组和分页
WordPress 归档页面是一个网站的历史内容存档,它允许用户浏览网站的过去内容。它的存在有以下几个意义:
楚客追梦
2024/08/07
2640
全部WordPress查询数组参考
WordPress输出内容时用到最多的就是$args =array( 这个查询数组,这篇文章给大家分享所有的,WordPress查询综合参考
小颖club
2022/04/12
7260
WordPress 文章查询教程5:如何使用分页相关的参数
在 WordPress 中,使用 WP_Query 进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。
Denis
2023/04/13
1.3K0
WordPress SEO优化:纯代码添加canonical标签
为网站添加添加canonical标签是SEO优化中非常重要的一步,rrel="canonical"可以解决因网址不同但内容重复,从而造成权重分散的问题,目前百度、Google、雅虎、微软等搜索引擎都已支持此标签。
Yangsh888
2022/08/15
6450
WordPress巧用面包屑导航,SEO优化。
什么是网站面包屑导航?面包屑导航意在告知用户所处的当前网页的位置,方便用户可以通过该导航快速返回上一级网页。 面包屑导航一般都在导航的下面,形式一般为 首页 > 一级目录名称 > 二级目录名称 > 目前位置,尽量要把面包屑导航的层次控制在四层以内,这样也有利与搜索引擎蜘蛛一层层往下爬,到了四层以下就很难爬到了。
Kit
2021/08/02
8950
WordPress巧用面包屑导航,SEO优化。
wordpress获取当前页面链接
  我们知道wordpress的<?php the_permalink(); ?>和<?php echo get_permalink(); ?>可以获取页面链接,但是有些比较复杂的环境可能输出的链接是
ytkah
2019/10/16
1.2K0
WordPress自定义查询WP_Query使用方法大全
  自定义调用文章在网站建设中很常用,wordpress也很人性化,用新建查询new WP_Query就能实现相关功能。WP_Query怎么用呢?随ytkah一起来看看吧
ytkah
2019/12/25
4.4K0
WP_Query 的所有参数
WP_Query 是 WordPress 的核心,它支持的参数非常灵活,也非常多,官方的文档也略嫌啰嗦,整理把所有的参数都整理了一遍,以后要使用 WP_Query 只要看这份文档就够了:
Denis
2023/04/15
5260
WordPress丨常见函数及拓展模板函数大全
wordpress模板是由PHP语句组成,很多不懂代码的站长都被PHP复杂的代码难倒,难以自己开发个性化的模板。其实想开发一个wordpress模板并不是太难,大家只要了解一些wordpress中的常用函数,即可按照自己的需要进行内容调用了。更高端一点的类似于一些PHP语句的判断等等,这就需要大家自己去学习提高了。本篇文章主要讲解wordpress开发模板中经常需要用到的一些函数。
V站CEO-西顾
2018/06/08
1.8K0
WordPress主题开发,从入门到精通。
相关文档:https://www.wpzhiku.com/document/wordpress-plugin-basics/
房东的狗丶
2023/02/17
10.8K0
WordPress 查询参数(WordPress Query Vars)完全列表
WordPress 查询参数分公开(Public)和私用(Private),公开就是可以博客链接加入参数就可以查询数据,而私有只能在代码中通过参数传递 WP_Query class。
Denis
2023/04/13
5620
wordpress调用函数大全
WordPress Header头部 PHP代码 (注: 也就是位于<head>和</head>之间的PHP代码)
纯情
2023/04/26
6020
WordPress 条件判断标签及用法大全
在 WordPress 主题和插件开发中,条件判断标签(Conditional Tags)是非常重要的,通过条件判断标签,我们可以判断各种情况,从而使用对应的代码等。例如在顶部导航条中有一个“首页”选项,在首页的时候需要设置成高亮,我们可以在头部导航模板文件(header.php)中使用条件判断标签 is_home() 来判断当前页面是不是首页,然后再输出高亮的 class。
Denis
2023/04/15
3.7K0
wordpress函数大全列表整理
wordpress有很多的函数可供调用,下面ytkah就整理了一下wordpress函数大全供各位参考,如果要详情,可以访问https://developer.wordpress.org/reference/functions/参数名/,感兴趣的朋友可以收藏
ytkah
2020/07/13
9230
无插件仅代码实现 WordPress 分页导航
WordPress 分页导航是一个用来代替WordPress默认的“旧文章、新文章”的一个功能,添加了分页,可以让用户快速跳转到所需要的页面,对提升用户体验有很大的帮助。今天就来分享Devework.com目前使用的分页导航代码实现方法,有了这个,相关分页导航插件(如wp-pagenavi)就可以光荣退休啦! 以下代码来自林木木童鞋,感谢原作者。 无插件仅代码实现 WordPress 分页导航教程 一、添加如下代码至主题的funtions.php文件夹内: function par_pagenavi($ra
Jeff
2018/01/19
2.3K0
WordPress 文章查询教程13:WP_Query 类的所有属性
在 WordPress 中,使用 WP_Query 进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。
Denis
2023/04/13
9750
wordpress不用插件实现Pagenavi页面导航功能
Pagenavi 是一个很好的功能,现在 WordPress 博客一般都是使用 WP-Pagenavi 插件来实现,但是如果插件一多的话整个wordpress效率就降低了,我们力求用尽量少的插件来实现所需要的功能。那么,wordpress不用插件要怎么实现Pagenavi功能呢?
ytkah
2022/03/14
3240
无插件仅代码实现 WordPress 分页导航(2)
最近在折腾 Jeff的阳台 的新主题,在老外的一个主题那里找到了分页导航的一段没有见过的代码,相对应之前的代码而言比较简洁(核心代码仅仅十来行),在这里推荐给大家。顺便多嘴一下:相信过不了多久 Jeff的阳台 就会重新换个皮肤改版上线,唯有新主题上线才能唤起我勤奋更新的动力了! 无插件仅代码实现 WordPress 分页导航教程 一、添加如下代码至主题的funtions.php文件夹内: //分页导航 devework.com function dw_pagination() { global $wp_qu
Jeff
2018/01/19
9020
WordPress防采集办法和解决思路
要想防止网站被恶意采集,那么就需要了解大多数的采集方式和规则,这样才能够反其道而行之的去屏蔽和防采集,有时候我们辛辛苦苦写的一些文章或者大批量的文章内容成为了别人的嫁衣,同时别人采集还增加服务器负担,想想就觉得不值得啊。
张子凡
2022/11/03
8810
WordPress防采集办法和解决思路
非插件实现WordPress分页导航
本文参考资源:1.http://down.chinaz.com/try/201209/2188_1.htm 2.http://xiedandan.com/wordpress-pagination.html
WindCoder
2018/09/20
9200
非插件实现WordPress分页导航
相关推荐
WordPress文章归档页面分组和分页
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档