Trong bài này mình sẽ giới thiệu tới mọi người 1 cách để phân trang bằng ajax khi lấy dữ liệu như bài post hoặc page.
Sau khi hoàn thiện bài hướng dẫn này chúng ta có được shortcode dạng [ajax_pagination] Trong shortcode này chúng ta có các thông số như sau.
[ajax_pagination post_type=”post” posts_per_page=”5″ paged=”1″]
post_type: slug của post, page hoặc custom post type.
posts_per_page: Số lượng bài hiển thị trên một trang
paged: bắt đầu từ page số mấy. cái này không cần cũng được
Folder AjaxPagination sẽ để ở ngay thư mục theme của bạn (wp-contents/themes/[your-theme]/AjaxPagination) và nhớ include vào file functions.php của theme chúng ta đang làm việc.
1 2 3 4 | /* * Thêm dòng này vào file functions.php của theme */include 'AjaxPagination/ajax_pagination_wp.php'; |
Và bây giờ chúng ta sẽ đi vào chi tiết từng file như sau:
Shortcode hiển thị dữ liệu
Tạo file ajax_pagination_wp.php trong folder AjaxPagination nói bên trên. Sau đó gán đoạn code bên dưới này vào
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /******************* * Load Post via ajax with Pagination - Query post * Author: Le Van Toan - www.levantoan.com ********************//****************** * Thêm shortcode ajax_pagination ********************/function ajax_pagination_svl( $atts ){ $atts = shortcode_atts( array( 'posts_per_page' => 5, 'paged' => 1, 'post_type' => 'post' ), $atts,'ajax_pagination' ); $posts_per_page = intval($atts['posts_per_page']); $paged = intval($atts['paged']); $post_type = sanitize_text_field($atts['post_type']); $allpost = '<div id="result_ajaxp">'; $allpost .= query_ajax_pagination( $post_type, $posts_per_page , $paged ); $allpost .= '</div>'; return $allpost;}add_shortcode('ajax_pagination', 'ajax_pagination_svl');function query_ajax_pagination( $post_type = 'post', $posts_per_page = 5, $paged = 1){ $args_svl = array( 'post_type' => $post_type, 'posts_per_page' => $posts_per_page, 'paged' => $paged, 'post_status' => 'publish' ); $q_svl = new WP_Query( $args_svl ); /*Tổng bài viết trong query trên*/ $total_records = $q_svl->found_posts; /*Tổng số page*/ $total_pages = ceil($total_records/$posts_per_page); if($q_svl->have_posts()): $allpost = '<div class="ajax_pagination" posts_per_page="'.$posts_per_page.'" post_type="'.$post_type.'">'; while($q_svl->have_posts()):$q_svl->the_post(); $allpost .= '<div class="ajaxp_list_post">'; $allpost .= '<a href="'.get_permalink().'" title="'.get_the_title().'">'.get_the_title().'</a> - <span>'.get_the_date().'</span>'; $allpost .= '</div>'; endwhile; $allpost .= '</div>'; $allpost .= paginate_function( $posts_per_page, $paged, $total_records, $total_pages); $allpost .='<div class="loading_ajaxp"><div id="circularG"><div id="circularG_1" class="circularG"></div><div id="circularG_2" class="circularG"></div><div id="circularG_3" class="circularG"></div><div id="circularG_4" class="circularG"></div><div id="circularG_5" class="circularG"></div><div id="circularG_6" class="circularG"></div><div id="circularG_7" class="circularG"></div><div id="circularG_8" class="circularG"></div></div></div>'; endif;wp_reset_query(); return $allpost;} |
Code phân trang PHP. Dạng 1,2,3…
Đoạn code này giúp chúng ta có phân trang dạng 1,2,3….Hãy copy và dán đoạn code này vào tiếp file ajax_pagination_wp.php bên trên nhé.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /******************Function phân trang PHP có dạng 1,2,3 ... ********************/function paginate_function($item_per_page, $current_page, $total_records, $total_pages){ $pagination = ''; if($total_pages > 0 && $total_pages != 1 && $current_page <= $total_pages){ //verify total pages and current page number $pagination .= '<ul class="pagination">'; $right_links = $current_page + 3; $previous = $current_page - 3; //previous link $next = $current_page + 1; //next link $first_link = true; //boolean var to decide our first link if($current_page > 1){ $previous_link = ($previous==0)?1:$previous; $pagination .= '<li class="first"><a href="#" data-page="1" title="First">«</a></li>'; //first link $pagination .= '<li><a href="#" data-page="'.$previous_link.'" title="Previous"><</a></li>'; //previous link for($i = ($current_page-2); $i < $current_page; $i++){ //Create left-hand side links if($i > 0){ $pagination .= '<li><a href="#" data-page="'.$i.'" title="Page'.$i.'">'.$i.'</a></li>'; } } $first_link = false; //set first link to false } if($first_link){ //if current active page is first link $pagination .= '<li class="first active">'.$current_page.'</li>'; }elseif($current_page == $total_pages){ //if it's the last active link $pagination .= '<li class="last active">'.$current_page.'</li>'; }else{ //regular current link $pagination .= '<li class="active">'.$current_page.'</li>'; } for($i = $current_page+1; $i < $right_links ; $i++){ //create right-hand side links if($i<=$total_pages){ $pagination .= '<li><a href="#" data-page="'.$i.'" title="Page '.$i.'">'.$i.'</a></li>'; } } if($current_page < $total_pages){ $next_link = ($i > $total_pages)? $total_pages : $i; $pagination .= '<li><a href="#" data-page="'.$next_link.'" title="Next">></a></li>'; //next link $pagination .= '<li class="last"><a href="#" data-page="'.$total_pages.'" title="Last">»</a></li>'; //last link } $pagination .= '</ul>'; } return $pagination; //return pagination links} |
Js và css trong hướng dẫn này
Dưới đây là đoạn js để gửi thông số và nhận kết quả mà ajax gửi ra để hiển thị.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /*******Author LeVanToan - https://levantoan.com*********/// JavaScript Document(function($) { $(document).ready(function(){ $( '#result_ajaxp' ).on( 'click',' ul.pagination a', function( e ) { /** Prevent Default Behaviour */ e.preventDefault(); /** Get data-page */ var data_page = $(this).attr( 'data-page' ); var posts_per_page = $('.ajax_pagination').attr( 'posts_per_page' ); var post_type = $('.ajax_pagination').attr( 'post_type' ); /** Ajax Call */ $.ajax({ cache: false, timeout: 8000, url: svl_array_ajaxp.admin_ajax, type: "POST", data: ({ action : 'LoadPostPagination', data_page : data_page, posts_per_page : posts_per_page, post_type : post_type }), beforeSend: function() { $( '.loading_ajaxp' ).css( 'display','block' ); }, success: function( data, textStatus, jqXHR ){ $( '#result_ajaxp' ).html( data ); }, error: function( jqXHR, textStatus, errorThrown ){ console.log( 'The following error occured: ' + textStatus, errorThrown ); }, complete: function( jqXHR, textStatus ){ } }); }); });})(jQuery); |
Còn css các bạn tham khảo thêm ở file đính kèm nha
Gọi và xử lý ajax trong WordPress
Hàm này giúp các bạn load dữ liệu bằng ajax.
1 2 3 4 5 6 7 8 9 10 11 | /** Xử lý Ajax trong WordPress */add_action( 'wp_ajax_LoadPostPagination', 'LoadPostPagination_init' );add_action( 'wp_ajax_nopriv_LoadPostPagination', 'LoadPostPagination_init' );function LoadPostPagination_init() { $posts_per_page = intval($_POST['posts_per_page']); $paged = intval($_POST['data_page']); $post_type = sanitize_text_field($_POST['post_type']); $allpost = query_ajax_pagination( $post_type, $posts_per_page , $paged ); echo $allpost; exit;} |

![[Excel] Hướng dẫn diệt Virus macro tự nhân bản files](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT1rmpnZOcKEwLJHevdkPehl-sRUcIkERBdErlxsldsMjzQurFbrMGNvOfwMT8SNqR9V1K_9N5L_B15c3Xx0AN0bC-Welh8-S3qBV8IhHROK1nCgzdlpiy7ulrcV6OV9GrdraNKi_kYGMm/s72-c/virus-excel-macro-kangatang.jpg)

Không có nhận xét nào:
Đăng nhận xét