Hướng dẫn load bài viết sử dụng AJAX genesis framework

Bài viết này mình hướng dẫn các bạn cách load  bài viết sử dụng AJAX mà không phải load lại trang, rất tiện dụng cho những bạn dùng mạng yếu, không mất nhiều thời gian để tải trang khác…

Chú ý: Load more này hoạt động trên tất cả các trang, ngoài home, trang chuyên mục, lưu trữ bài viết…


Xem thêm

>> Hướng dẫn thêm chữ NEW vào bài viết mới genesis

>> Làm thế nào để thanh nav nổi trên màn hình genesis theme

>> Tổng hợp code tùy biến nút Next Page và Previous Page trong Genesis Framework


Hướng dẫn load bài viết sử dụng AJAX trong Genesis.

Bước 1: Tạo một tệp có tên load-more.js trong thư mục js của child theme và dán mã sau.

jQuery(function($){

// $('.post-listing').append( '<button class="load-more">Load More</button>' );
 // var button = $('.post-listing .load-more');
 var page = 2;
 var loading = false;

$('body').on('click', '.load-more', function(){
 if( ! loading ) {
 loading = true;
 $(this).remove();
 var data = {
 action: 'be_ajax_load_more',
 page: page,
 query: beloadmore.query,
 };
 $.post(beloadmore.url, data, function(res) {
 if( res.success) {
 $('.post-listing').append( res.data );
 // $('.post-listing').hide().append( res.data ).fadeIn(500); // to have fadeIn effect
 // $('.post-listing').append( button );
 page = page + 1;
 loading = false;
 } else {
 // console.log(res);
 }
 }).fail(function(xhr, textStatus, e) {
 // console.log(xhr.responseText);
 });
 }
 });

});

 

Bước 2: Tạo một tệp có tên template_load-more.php trong trong child theme.

Dán toàn bộ code này.

<?php

/**
 * Javascript for Load More
 *
 */
function be_load_more_js() {

global $wp_query;
 $args = array(
 'url' => admin_url( 'admin-ajax.php' ),
 'query' => $wp_query->query
 );

wp_enqueue_script( 'be-load-more', get_stylesheet_directory_uri() . '/js/load-more.js', array( 'jquery' ), '1.0', true );
 wp_localize_script( 'be-load-more', 'beloadmore', $args );

}
add_action( 'wp_enqueue_scripts', 'be_load_more_js' );

add_action( 'genesis_before_loop', 'sk_opening', 20 ); // a high priority of 20 to make this appear below .archive-description
function sk_opening() {
 echo '<div class="post-listing">';
}

add_action( 'genesis_after_loop', 'sk_closing' );
function sk_closing() {
 // echo '</div>';
 echo '<button class="load-more">Load More</button></div>';
}

// Remove Archive Pagination
remove_action( 'genesis_after_endwhile', 'genesis_posts_nav' );

genesis();

Bước 3: Dán mã bên dưới vào cuối file functions.php.

/**
 * AJAX Load More
 * @link http://www.billerickson.net/infinite-scroll-in-wordpress
 */
function be_ajax_load_more() {

$args = isset( $_POST['query'] ) ? array_map( 'esc_attr', $_POST['query'] ) : array();
 $args['post_type'] = isset( $args['post_type'] ) ? esc_attr( $args['post_type'] ) : 'post';
 $args['paged'] = esc_attr( $_POST['page'] );
 $args['post_status'] = 'publish';

ob_start();
 $loop = new WP_Query( $args );
 if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post();
 printf( '<article %s>', genesis_attr( 'entry' ) );

do_action( 'genesis_entry_header' );

do_action( 'genesis_before_entry_content' );

printf( '<div %s>', genesis_attr( 'entry-content' ) );
 do_action( 'genesis_entry_content' );
 echo '</div>';

do_action( 'genesis_after_entry_content' );

do_action( 'genesis_entry_footer' );

echo '</article>';
 // endwhile; endif; wp_reset_postdata();
 endwhile; if ( $_POST['page'] < $loop->max_num_pages ) { echo '<button class="load-more">Load More</button>'; } endif; wp_reset_postdata();
 $data = ob_get_clean();
 wp_send_json_success( $data );
 wp_die();
}
add_action( 'wp_ajax_be_ajax_load_more', 'be_ajax_load_more' );
add_action( 'wp_ajax_nopriv_be_ajax_load_more', 'be_ajax_load_more' );

/**
 * Template Redirect
 * Use template_load-more.php for Posts page and all archives.
 */
add_filter( 'template_include', 'custom_blog_archives_template', 99 );
function custom_blog_archives_template( $template ) {

if ( is_home() || is_archive() ) {
 $new_template = locate_template( array( 'template_load-more.php' ) );
 if ( '' != $new_template ) {
 return $new_template ;
 }
 }

return $template;
}

Bước 4: Thêm mã sau đây trong style.css.

.post-listing {
 margin-bottom: 40px;
 }

.load-more {
 display: table;
 margin: 0 auto;
 }

Lưu lại.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đặt lịch hẹn Liên hệ Tải Credentials