• 首頁
  • 快訊
  • 專題
  • 商城
  • 導(dǎo)航
  • 圈子新
文章
文章商城快訊網(wǎng)址導(dǎo)航

{{userData.name}}已認(rèn)證

文章

評論

關(guān)注

粉絲

¥{{role.user_data.money}}
{{role.user_data.credit}}
您已完成今天任務(wù)的
  • 私信列表所有往來私信

  • 財富管理余額、積分管理

  • 推廣中心推廣有獎勵

    NEW
  • 任務(wù)中心每日任務(wù)

    NEW
  • 我的訂單查看我的訂單

  • 我的設(shè)置編輯個人資料

  • 進(jìn)入后臺管理

  • 資訊
  • 教程
    • 新手入門
    • 基礎(chǔ)教程
    • 用戶交互
    • 影音播放
    • 網(wǎng)站SEO
    • 后臺定制
    • 商城相關(guān)
    • 網(wǎng)站安全
    • 網(wǎng)站維護(hù)
    • 開發(fā)教程
  • 主題
    • 自媒體主題
    • 下載站主題
    • 會員制主題
    • 淘寶客主題
    • 博客主題
    • CMS主題
    • 商城主題
    • 企業(yè)主題
    • 導(dǎo)航主題
    • 圖片主題
    • 單頁主題
  • 插件
    • 網(wǎng)站安全插件
    • 網(wǎng)站優(yōu)化插件
    • 用戶交互插件
    • 圖片影音插件
    • 商城相關(guān)插件
    • 運(yùn)維管理插件
    • 其他插件
  • 成品站上新
    • B2B營銷模板
  • 視頻
    • WordPress 新手入門
    • WooCommerce 開發(fā)指南
    • WordPress 主題開發(fā)核心知識
    • VPS/云服務(wù)器使用詳解
    • 帶你玩轉(zhuǎn)Avada主題
    • SiteGround 主機(jī)使用教程
  • 商城
    • WordPress成品站模板
    • WordPress收費(fèi)主題
    • WordPress收費(fèi)插件
    • WordPress視頻教程
    • WordPress付費(fèi)服務(wù)
  • 多語言
  • 現(xiàn)用主題B2
    • 購買B2主題
    • B2主題使用教程
  • 下載WordPress
投稿
當(dāng)前位置:首頁>WordPress建站>WordPress開發(fā)>WordPress無刷新分類篩選以及分頁的文章列表

WordPress無刷新分類篩選以及分頁的文章列表

  • WordPress開發(fā)
  • 17年1月10日
  • 編輯
jsonvue

我們曾經(jīng)講了如何制作短碼(查看),今天我們就通過短碼實(shí)現(xiàn)一個帶有無刷新動態(tài)分類篩選以及分頁的文章列表。

該文章列表帶有單選篩選功能,篩選條件可以是分類、標(biāo)簽或者其他自定義分類,采用ajax技術(shù),文章列表可以通過數(shù)字分頁。演示效果,猛戳這里>>>  該演示效果沒有特定CSS修飾,需自行添加

1.編寫短碼函數(shù)

function jsonvue_filter_posts_sc($atts) {
    $a = shortcode_atts( array(
        'tax'      => 'category', //可以改為post_tag
        'terms'    => false, //排除某個分類
        'active'   => false, //設(shè)定默認(rèn)加載哪個分類
        'per_page' => 12 //設(shè)定每頁文章數(shù)量
    ), $atts );
    $result = NULL;
    $terms  = get_terms($a['tax']);
//排除某個分類就用下面一句,在短碼添加terms='分類id'就可以排除
 //$terms = get_terms($a['tax'],array('exclude' =>$a['terms'])); 
    if (count($terms)) :
        ob_start(); ?>
            <div id="container-async" data-paged="<?php echo $a['per_page']; ?>" class="sc-ajax-filter">
                <ul class="nav-filter">
				<li>
                        <a href="#" data-filter="post_tag" data-term="all-terms" data-page="1">
                            所有
                        </a>
                    </li>
                    <?php foreach ($terms as $term) : ?>
                        <li<?php if ($term->term_id == $a['active']) :?> class="active"<?php endif; ?>>
                            <a href="<?php echo get_term_link( $term, $term->taxonomy ); ?>" data-filter="<?php echo $term->taxonomy; ?>" data-term="<?php echo $term->slug; ?>" data-page="1">
                                <?php echo $term->name; ?>
                            </a>
                        </li>
                    <?php endforeach; ?>
                </ul>

                <div class="status"></div>
                <div class="content"></div>
            </div>
        
        <?php $result = ob_get_clean();
    endif;
    return $result;
}

注冊該短碼:

add_shortcode( 'jsonvue_posts', 'jsonvue_ajax_posts_sc');

2.其他函數(shù)

第一步的短碼函數(shù)并沒有帶有具體的處理邏輯,比如:發(fā)送ajax請求,php處理請求,分頁數(shù)據(jù)等功能,那么現(xiàn)在我們就開始構(gòu)建這些函數(shù)。

首先是 發(fā)送ajax請求的JS代碼,這個是通過jquery實(shí)現(xiàn)。

$('#container-async').on('click', 'a[data-filter], .pagination a', function(event) {
            if(event.preventDefault) { event.preventDefault(); }

            $this = $(this);

        
            if ($this.data('filter')) {
                $this.closest('ul').find('.active').removeClass('active');
                $this.parent('li').addClass('active');
                $page = $this.data('page');
            }
            else {
              
                $page = parseInt($this.attr('href').replace(/\D/g,''));
                $this = $('.nav-filter .active a');
            }
            

            $params    = {
                'page' : $page,
                'tax'  : $this.data('filter'),
                'term' : $this.data('term'),
                'qty'  : $this.closest('#container-async').data('paged'),
            };

          
            get_posts($params);
        });
        
        $('a[data-term="all-terms"]').trigger('click');

Ajax請求后臺php獲取數(shù)據(jù)的JS代碼

 function get_posts($params) {

            $container = $('#container-async');
            $content   = $container.find('.content');
                $status    = $container.find('.status');

            $status.text('正在加載 ...');

            $.ajax({
                        url: jsonvue.ajax_url,
                        data: {
                            action: 'do_filter_posts',
                    nonce: jsonvue.nonce,
                    params: $params
                        },
                        type: 'post',
                        dataType: 'json',
                        success: function(data, textStatus, XMLHttpRequest) {
                    
                            if (data.status === 200) {
                                $content.html(data.content);
                            }
                            else if (data.status === 201) {
                                $content.html(data.message);    
                            }
                            else {
                                $status.html(data.message);
                            }
                     },
                     error: function(MLHttpRequest, textStatus, errorThrown) {

                    $status.html(textStatus);
                    
                    /*console.log(MLHttpRequest);
                    console.log(textStatus);
                    console.log(errorThrown);*/
                     },
                complete: function(data, textStatus) {
                    
                    msg = textStatus;

                    if (textStatus === 'success') {
                        msg = data.responseJSON.found;
                    }

                    $status.text('已顯示: ' + msg+'篇文章');
                    
                    /*console.log(data);
                    console.log(textStatus);*/
                }
            });
        }

php函數(shù)處理ajax請求

function jsonvue_filter_posts() {
    if( !isset( $_POST['nonce'] ) || !wp_verify_nonce( $_POST['nonce'], 'jsonvue' ) )
        die('Permission denied');
  
    $response = [
        'status'  => 500,
        'message' => '貌似有錯誤,請稍后再試 ...',
        'content' => false,
        'found'   => 0
    ];
    $tax  = sanitize_text_field($_POST['params']['tax']);
    $term = sanitize_text_field($_POST['params']['term']);
    $page = intval($_POST['params']['page']);
    $qty  = intval($_POST['params']['qty']);
    
    if (!term_exists( $term, $tax) && $term != 'all-terms') :
        $response = [
            'status'  => 501,
            'message' => '沒找到分類',
            'content' => 0
        ];
        die(json_encode($response));
    endif;
    if ($term == 'all-terms') : 
        $tax_qry[] = [
            'taxonomy' => $tax,
            'field'    => 'slug',
            'terms'    => $term,
            'operator' => 'NOT IN'
        ];
    else :
        $tax_qry[] = [
            'taxonomy' => $tax,
            'field'    => 'slug',
            'terms'    => $term,
        ];
    endif;
    
    $args = [
        'paged'          => $page,
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => $qty,
        'tax_query'      => $tax_qry
    ];
    $qry = new WP_Query($args);
    ob_start();
        if ($qry->have_posts()) :
            while ($qry->have_posts()) : $qry->the_post(); ?>

                <article class="loop-item">
                    <header>
                        <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                    </header>
                    <div class="entry-summary">
                        <?php the_excerpt(); ?>
                    </div>
                </article>

            <?php endwhile;
            
            jsonvue_ajax_pager($qry,$page);
            $response = [
                'status'=> 200,
                'found' => $qry->found_posts
            ];
            
        else :
            $response = [
                'status'  => 201,
                'message' => '沒有文章'
            ];
        endif;
    $response['content'] = ob_get_clean();
    die(json_encode($response));
}
add_action('wp_ajax_do_filter_posts', 'jsonvue_filter_posts');
add_action('wp_ajax_nopriv_do_filter_posts', 'jsonvue_filter_posts');

分頁函數(shù):

function jsonvue_ajax_pager( $query = null, $paged = 1 ) {
    if (!$query)
        return;
    $paginate = paginate_links([
        'base'      => '%_%',
        'type'      => 'array',
        'total'     => $query->max_num_pages,
        'format'    => '#page=%#%',
        'current'   => max( 1, $paged ),
        'prev_text' => 'Prev',
        'next_text' => 'Next'
    ]);
    if ($query->max_num_pages > 1) : ?>
        <ul class="pagination">
            <?php foreach ( $paginate as $page ) :?>
                <li><?php echo $page; ?></li>
            <?php endforeach; ?>
        </ul>
    <?php endif;
}

最后,將上述代碼整合,并加載進(jìn)wordpress :

function assets() {
    wp_enqueue_script( 'bootcdn', 'http://cdn.bootcss.com/jquery/2.2.3/jquery.min.js">' ); 
 wp_enqueue_script('jsonvue/js', get_template_directory_uri().'/js/custom.js');
    //php想向js傳遞變量
    wp_localize_script( 'jsonvue/js', 'jsonvue', array(
        'nonce'    => wp_create_nonce( 'jsonvue' ),//ajax請求安全處理
        'ajax_url' => admin_url( 'admin-ajax.php' )//調(diào)用wordpress自帶ajax處理程序
    ));
}
add_action('wp_enqueue_scripts', 'assets', 100);

注意:上述代碼除了js文件,都要放在主題文件夾下function.php文件里面,默認(rèn)短碼調(diào)用方式:

[jsonvue_posts]

可配置屬性有:

‘tax’ => ‘post_tag’, // 分類方式 category 或者post_tag
‘terms’ => false, // 自定義分類比如排除某個分類
‘active’ => false, //默認(rèn)加載分類默認(rèn)加載全部分類
‘per_page’ => 12 // 每頁顯示文章數(shù),

另外,該代碼運(yùn)行需要PHP5.4或者以上環(huán)境。

源碼下載:code

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
分類分類列表分類篩選
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
WordPress開發(fā)

WordPress 檢查一篇文章是否存在

2016-9-9 9:56:39

WordPress開發(fā)

給WordPress的文章添加自定義文章狀態(tài)

2018-7-27 8:35:36

猜你喜歡

WordPress分類存檔頁添加子分類選擇列表

20年5月2日51.7k

WordPress 為當(dāng)前文章在【分類】小工具中的所屬分類添加current-cat類名

21年4月17日21.2k

WordPress代碼 之 獲取WordPress所有分類名字和ID

12年10月13日1116.9k

自定義WordPress分類排序 Custom Taxonomy Order

20年10月25日02.5k
1 條回復(fù) A文章作者 M管理員

您必須登錄或注冊以后才能發(fā)表評論

  1. 希臘老爺
    希臘老爺 學(xué)前班lv0
    18年1月6日

    …

關(guān)于作者

jsonvue

小學(xué)生lv1

文章

1

評論

0

關(guān)注

0

粉絲

0
[文章] WordPress無刷新分類篩選以及分頁的文章列表
Ta的全部動態(tài)

最新文章

  • 1

    Cimo:一款在瀏覽器端壓縮和轉(zhuǎn)換為 WebP 圖片的WordPress插件

    2月5日
  • 2

    FluentCart 微信支付網(wǎng)關(guān)插件:WPKJ Payment Gateway for FluentCart with WeChat

    25年11月24日
  • 3

    FluentCart 支付寶付款網(wǎng)關(guān)插件:WPKJ Payment Gateway for FluentCart with Alipay

    25年10月23日
  • 4

    FluentCart:優(yōu)秀的WordPress商城插件,最有希望替代WooCommerce和EDD

    25年10月23日
  • 5

    使用 Captcha for WordPress 攔截垃圾郵件/評論/表單提交

    25年8月31日

最新評論

PREVNEXT
  • 來自:

熱門推薦

  • 數(shù)碼手表產(chǎn)品營銷模板 B2B011

    數(shù)碼手表產(chǎn)品營銷模板 B2B011

    ¥ 680
  • 廚具小家電產(chǎn)品營銷模板 B2B020

    廚具小家電產(chǎn)品營銷模板 B2B020

    ¥ 680
  • WordPress QQ/微博/微信/釘釘/手機(jī)登錄插件

    WordPress QQ/微博/微信/釘釘/手機(jī)登錄插件

    ¥ 328
  • 非常棒的WordPress緩存優(yōu)化插件 WP Rocket

    非常棒的WordPress緩存優(yōu)化插件 WP Rocket

    ¥ 430
  • 電動車摩托車配件產(chǎn)品營銷模板 B2B005

    電動車摩托車配件產(chǎn)品營銷模板 B2B005

    ¥ 680
  • 搜索引擎蜘蛛統(tǒng)計分析插件 Spider Analyser

    搜索引擎蜘蛛統(tǒng)計分析插件 Spider Analyser

    ¥ 99
  • WordPress熱門關(guān)鍵詞推薦插件專業(yè)版

    WordPress熱門關(guān)鍵詞推薦插件專業(yè)版

    ¥ 199
  • 帶你玩轉(zhuǎn)Avada【視頻教程】

    帶你玩轉(zhuǎn)Avada【視頻教程】

    ¥ 480
?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索
  • 掃碼打開當(dāng)前頁

  • 微信掃一掃,聯(lián)系我們

  • 關(guān)注微信公眾號 WPDAXUE

返回頂部
幸運(yùn)之星正在降臨...
點(diǎn)擊領(lǐng)取今天的簽到獎勵!
恭喜!您今天獲得了{{mission.data.mission.credit}}積分

今日簽到

連續(xù)簽到

  • {{item.credit}}
  • 連續(xù){{item.count}}天
查看所有
我的優(yōu)惠劵
  • ¥優(yōu)惠劵
    使用時效:無法使用
    使用時效:

    之前

    使用時效:永久有效
    優(yōu)惠劵ID:
    ×
    限制以下商品使用: 限制以下商品分類使用: 不限制使用:
    [{{ct.name}}]
    所有商品和商品類型均可使用
沒有優(yōu)惠劵可用!

購物車
  • ×
    刪除
購物車空空如也!

清空購物車 前往結(jié)算
您有新的私信
沒有新私信
寫新私信 查看全部

專業(yè)提供WordPress網(wǎng)站建設(shè),主題和插件開發(fā)、漢化、安裝等服務(wù)

微信掃一掃聯(lián)系我們

查看所有服務(wù)項目

關(guān)于本站

WordPress大學(xué)創(chuàng)建于2012年10月,專注于 WordPress建站教學(xué)和WordPress資源分享。我們希望通過努力,讓更多人了解WordPress這個全世界最流行的建站程序,讓每個人都能用好WordPress!

幫助中心

  • 關(guān)于我們
  • 服務(wù)項目
  • 付款方式
  • 發(fā)票開具
  • 廣告投放
  • 服務(wù)條款
  • 推廣返現(xiàn)

服務(wù)器推薦

  • 阿里云
  • 騰訊云
  • SiteGround(外貿(mào))

關(guān)注交流

微信公眾號WPDAXUE

微信公眾號
WPDAXUE

微信掃一掃,長按識別二維碼加群

微信掃一掃
長按識別入群

QQ掃描加群 287891283

QQ掃描加群
287891283

© 2012-2026 玉林市沃鵬網(wǎng)絡(luò)科技有限公司?基于 WordPress
?桂ICP備2022005949號-1 ?營業(yè)執(zhí)照
首頁專題圈子
商城菜單我的

黄石市| 平江县| 客服| 武夷山市| 乌兰浩特市| 鹤庆县| 广西| 蒲城县| 永嘉县| 西和县| 江山市| 大渡口区| 永泰县| 宁明县| 基隆市| 阜宁县| 周至县| 泽州县| 灵宝市| 内江市| 新竹县| 时尚| 濉溪县| 广水市| 合江县| 九龙县| 榕江县| 常德市| 长岛县| 平和县| 女性| 封丘县| 兰考县| 德令哈市| 绥芬河市| 郓城县| 南漳县| 漳浦县| 左云县| 东丽区| 互助|