Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
10.2 C语言打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2020/12/08
1.4K0
10.2 C语言打开与关闭文件
C语言文件-学习三十一
本文最后更新于2022年02月27日,已超过0天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
XG.孤梦
2022/03/01
6040
C语言文件-学习三十一
C语言——文件操作
磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件
小李很执着
2024/06/15
1540
C语言——文件操作
【C语言】文件操作详解 - 从打开到关闭
如果没有文件,我们写的程序的数据存储在电脑的内存当中,如果程序退出,内存回收,数据就丢失了,再次运行程序时,看不到上次程序的数据,如果要将数据进行持久化的保存,我们可以使用文件。
_孙同学
2024/12/25
1540
【C语言】文件操作详解 - 从打开到关闭
C语言从入门到实战——文件操作
C语言中的文件操作是通过使用文件指针来实现的。可以使用标准库中的函数来打开、读取、写入和关闭文件。
鲜于言悠
2024/03/20
4690
C语言从入门到实战——文件操作
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?那是因为C语言程序在启动的时候,默认打开了3个流:
迷迭所归处
2025/04/17
930
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
【C语言】与文件有关的操作
数据如果存在内存中,当程序退出、断电,数据就丢失了。 而数据存在硬盘中,其实就是存储在文件中,数据就不会因为断电、程序退出就丢失了。 而想要数据持久化,就需要存在文件中。 那怎么操作文件呢?
zxctscl
2024/01/23
1940
【C语言】与文件有关的操作
【C语言】文件操作
磁盘(硬盘)上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。
用户11290673
2024/09/25
1230
【C语言】文件操作
C语言文件操作超详解
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。
fhvyxyci
2024/09/24
1240
C语言文件操作超详解
文件操作——C语言
如果没有文件,我们写的程序的数据都是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等程序再次运行,我们是无法看到上次程序的数据的。如果想要将数据持久化的保存,我们可以使用文件来存储数据。
星辰与你
2024/10/17
1290
文件操作——C语言
【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)
   我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件    文件是计算机系统中的一个基本概念,它是存储在计算机上的信息集合,可以是文本文档、图片、程序等,但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)
TANGLONG
2024/10/20
2040
【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)
【C语言基础】:文件操作详解(前篇:准备知识)
文件是指存储在计算机或其他电子设备上的数据集合,通常用来存储文本、图像、音频、视频或其他类型的信息。
爱喝兽奶的熊孩子
2024/04/10
4100
【C语言基础】:文件操作详解(前篇:准备知识)
【C进阶】—— 一篇文章带你学会C语言的文件操作
一个文件要有一个唯一的文件标识,以便用户识别和引用。 为了方便起见,文件标识常被称为文件名。
YIN_尹
2024/01/23
2710
【C进阶】—— 一篇文章带你学会C语言的文件操作
轻松拿捏C语言——【文件操作】
程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows 环境后缀为.exe)
用户11162265
2024/06/14
940
轻松拿捏C语言——【文件操作】
fscanf读取一行字符串-【C语言】15.文件操作
   在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。
宜轩
2022/12/26
2.3K0
C语言文件操作
磁盘上的文件是文件,在程序设计的时候,我们一般将文件分为两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。
用户11286421
2024/09/23
1020
C语言文件操作
【C语言】文件操作
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。
P_M_P
2024/01/18
2000
【C语言】文件操作
【C语言】深度探讨文件操作(一)
本小节,我们学习文件操作的知识,为什么使用文件?什么是文件?程序文件和数据文件,文件名的构成,二进制文件和文本文件? 文件的打开和关闭,认识 流和标准流,利用 ⽂件的顺序读写,最后进行了简单文件拷贝,干货满满!学习起来吧😃!
学习起来吧
2024/02/29
1720
【C语言】深度探讨文件操作(一)
C语言中的文件和文件操作
硬盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能角度来分类的)。
用户11305458
2024/10/09
1320
C语言中的文件和文件操作
C语言-文件操作
我们通常通过文件将我们的资料或者代码给保存到电脑的硬盘中。如果不使用程序的话我们的所运行的程序在推出后就会丢失数据,这是因为我们运行的时候他使用的是电脑的内存,在退出程序后内存会被回收,数据也就随之而去了,再次运行程序就找不到之前的数据了。
DevKevin
2024/04/04
1610
C语言-文件操作
相关推荐
10.2 C语言打开与关闭文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验