5 WordPress Pagination Code Snippets พร้อมตัวอย่าง [ง่ายถึงขั้นสูง]

เผยแพร่แล้ว: 2020-02-03

รหัสเลขหน้าในตัวอย่าง WordPress หากคุณกำลังมองหาโค้ดการแบ่งหน้าที่ดีที่สุดใน WordPress พร้อมตัวอย่างเฉพาะ คุณจะพบตัวอย่างโค้ดการแบ่งหน้าที่แชร์ในโพสต์นี้จะมีประโยชน์มาก คุณสามารถใช้รหัสการแบ่งหน้านี้ในธีม WordPress หรือในปลั๊กอิน WordPress แบบกำหนดเองที่ต้องมีการแบ่งหน้าโพสต์ ให้ฉันตัดการไล่ล่าและแบ่งปันข้อมูลโค้ดการแบ่งหน้าที่ฉันโปรดปราน:

#1) WordPress วนรอบด้วย Simple Pagination Code

หากคุณต้องการเพิ่มการแบ่งหน้าในลูป WordPress คุณสามารถใช้รหัสการแบ่งหน้าถัดไปและก่อนหน้าด้านล่าง:

 <?php if ( have_posts() ) : ?>

<!-- เพิ่มฟังก์ชันการแบ่งหน้าที่นี่ -->

<!-- จุดเริ่มต้นของลูปหลัก -->
<?php ในขณะที่ ( have_posts() ) : the_post(); ?>

<!-- ลูปหลักของธีมที่เหลือ -->

<?php เมื่อสิ้นสุด; ?>
<!-- สิ้นสุดลูปหลัก -->

<!-- เพิ่มฟังก์ชันการแบ่งหน้าที่นี่ -->

<div class="nav-previous alignleft"><?php Previous_posts_link( 'โพสต์ที่เก่ากว่า' ); ?></div>
<div class="nav-next alignright"><?php next_posts_link( 'โพสต์ที่ใหม่กว่า' ); ?></div>

<?php else : ?>
<p><?php _e('ขออภัย ไม่มีข้อความใดที่ตรงกับเกณฑ์ของคุณ'); ?></p>
<?php endif; ?>

#2) WordPress การแบ่งหน้าด้วยตัวเลข

ตัวเลือกการแบ่งหน้า WordPress ที่ยอดเยี่ยมอีกอย่างหนึ่งคือการใช้เลขหน้าที่เพิ่มตัวเลขลงในโพสต์และจัดกลุ่มโพสต์ตามตัวเลข ตัวอย่างเช่น คุณสามารถแสดง 5 โพสต์ในหน้า นี่คือ รหัสการแบ่งหน้าใน WordPress สำหรับการใส่เลขหน้า :

 <?php 

#STEP 1: สร้างฟังก์ชันเลขหน้า WordPress ที่เป็นตัวเลข 

ฟังก์ชัน njengah_numeric_pagination () {
 
    ถ้า( is_singular() )
        กลับ;
 
    โกลบอล $wp_query;
 
    /** หยุดดำเนินการหากมีเพียง 1 หน้า */
    ถ้า( $wp_query->max_num_pages <= 1 )
        กลับ;
 
    $paged = get_query_var( 'เพจ' ) ? absint(get_query_var( 'เพจ' ) ) : 1;
    $max = intval( $wp_query->max_num_pages );
 
    /** เพิ่มหน้าปัจจุบันในอาร์เรย์ */
    ถ้า ( $paged >= 1 )
        $links[] = $paged;
 
    /** เพิ่มหน้ารอบ ๆ หน้าปัจจุบันไปยังอาร์เรย์ */
    ถ้า ( $paged >= 3 ) {
        $links[] = $paged - 1;
        $links[] = $paged - 2;
    }
 
    if ( ( $paged + 2 ) <= $max ) {
        $links[] = $paged + 2;
        $links[] = $paged + 1;
    }
 
    echo '<div class="navigation"><ul>' . "\n";
 
    /** ลิงค์โพสต์ก่อนหน้า */
    ถ้า ( get_previous_posts_link() )
        printf( '<li>%s</li>' . "\n", get_previous_posts_link() );
 
    /** ลิงก์ไปยังหน้าแรก บวกจุดไข่ปลาหากจำเป็น */
    if ( ! in_array( 1, $links ) ) {
        $class = 1 == $paged ? ' class="active"' : '';
 
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( 1 ) ), '1' );
 
        ถ้า ( ! in_array( 2, $links ) )
            echo '<li>…</li>';
    }
 
    /** เชื่อมโยงไปยังหน้าปัจจุบัน บวก 2 หน้าในทิศทางใดทิศทางหนึ่งหากจำเป็น */
    เรียงลำดับ ( $links );
    foreach ( (array) $links เป็น $link ) {
        $class = $paged == $link ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $link ) ), $link );
    }
 
    /** ลิงก์ไปยังหน้าสุดท้าย บวกจุดไข่ปลาหากจำเป็น */
    if ( ! in_array( $max, $links ) ) {
        if ( ! in_array( $สูงสุด - 1, $links ) )
            echo '<li>…</li>' "\n";
 
        $class = $paged == $max ? ' class="active"' : '';
        printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $max ) ), $max );
    }
 
    /** ลิงค์โพสต์ถัดไป */
    ถ้า ( get_next_posts_link() )
        printf( '<li>%s</li>' . "\n", get_next_posts_link() );
 
    ก้อง '</ul></div>' "\n";
 
}

#STEP 2: เพิ่มลงในเทมเพลตโดยใช้การเรียกฟังก์ชันด้านบนนี้ 

njengah_numeric_pagination();

#STEP 3 : จัดรูปแบบการแบ่งหน้าให้เหมาะสมกับสไตล์ธีมของคุณ 

/** CSS Classes เพื่อจัดรูปแบบการแบ่งหน้า*/ 

.navigation ลี {
    
}
.navigation li {
	
	
}

#3) ตัวอย่างการแบ่งหน้า WordPress Ajax

หากคุณกำลังมองหาโค้ดการแบ่งหน้า Ajax ใน WordPress ฉันพบตัวอย่างบน GitHub ที่ทำงานได้ดีมากและโค้ดอยู่ในรูปของปลั๊กอิน ฉันได้ปรับแต่งให้เป็นปลั๊กอินสำหรับบทช่วยสอนของเรา และสามารถคัดลอกโค้ดไปยังไฟล์และบันทึกในรูปแบบ zip และติดตั้งเป็นปลั๊กอินได้ ต่อไปนี้เป็นโค้ดตัวอย่างการแบ่งหน้า WordPress Ajax:

 <?php
/**
 * ชื่อปลั๊กอิน: Njengah Ajax Pagination
 * URI ของปลั๊กอิน: https://njengah.com 
 * คำอธิบาย: ตัวอย่างการแบ่งหน้า WordPress Ajax
 * เวอร์ชัน: 1.0.0
 * ผู้แต่ง: Joe Njenga
 * URI ผู้แต่ง: https://njengah.com 
 * ใบอนุญาต: GPL-2.0+
 * URI ใบอนุญาต: http://www.gnu.org/licenses/gpl-2.0.txt
 * โดเมนข้อความ: cs-pagination
 * เส้นทางโดเมน: /languages
 */

// เครดิต - Casper Schultz 

คลาส Njengah_Ajax_Pagination {

	ป้องกัน $num_per_page;

	ฟังก์ชั่นสาธารณะ __construct () {
		$this->num_per_page = 5;
		$this->init();
	}

	ฟังก์ชันที่ได้รับการป้องกัน init() {
		add_action( 'init', array( $this, 'add_rewrite_rule' ) );
		add_filter( 'query_vars', array( $this, 'add_query_vars' ) );
		add_action( 'parse_request', array( $this, 'parse_request' ) );
	}

	/**
	 * แยกวิเคราะห์คำขอที่เข้ามาและสร้างผลลัพธ์
	 */
	ฟังก์ชั่น parse_request( $wp ) {

		ถ้า ( array_key_exists ( 'cs-page', $wp->query_vars ) ) {

			$page = isset ( $wp->query_vars['cs-page'] ) ? $wp->query_vars['cs-page'] : 1;

			$args = อาร์เรย์ (
				'post_type' => 'โพสต์',
				'post_per_page' => $this->num_per_page,
				'paged' => $page,
			);

			$query = ใหม่ WP_Query( $args );

			// เราจำเป็นต้องรู้จำนวนโพสต์ทั้งหมดที่พบ
			$values['total'] = $query->found_posts;

			// และต่อหน้า
			$values['per_page'] = $นี้->num_per_page;

			$values['posts'] = อาร์เรย์ ();

			// ให้ส่งข้อมูลที่เราต้องการเท่านั้น
			ในขณะที่ ( $query->have_posts() ) {

				$query->the_post();

				$values['posts'][] = อาร์เรย์ (
					'ID' => get_the_ID(),
					'title' => get_the_title(),
				);
			}

			wp_reset_postdata();
			wp_send_json( $ค่า );
		}
	}

	/**
	 * เพิ่ม args แบบสอบถามที่จำเป็น
	 */
	ฟังก์ชั่น add_query_vars ( $query_vars ) {
		$query_vars[] = 'cs-page';

		ส่งคืน $query_vars;
	}

	/**
	 * เพิ่มกฎการเขียนใหม่สำหรับการแบ่งหน้าแบบกำหนดเองของเรา เพื่อให้เราสามารถหลีกเลี่ยงการใช้ admin-ajax
	 */
	ฟังก์ชัน add_rewrite_rule() {
		add_rewrite_rule( '^cs-paginate/([0-9]+)/?', 'index.php?cs-page=$matches[1]', 'top' );
	}

	/**
	 * ล้างกฎการเขียนใหม่
	 */
	ติดตั้งฟังก์ชันคงที่ () {
		flush_rewrite_rules();
	}
}


ฟังก์ชัน njengah_ajax_pagination_init () {
	ใหม่ Njengah_Ajax_Pagination();
}

njengah_ajax_pagination_init();

// จำเป็นต้องล้างกฎการเขียนซ้ำเมื่อเปิดใช้งาน
register_activation_hook( __FILE__, array( 'Njengah_Ajax_Pagination', 'install' ) );

#4) การแบ่งหน้า WordPress สำหรับประเภทโพสต์ที่กำหนดเอง

สำหรับการแบ่งหน้าประเภทโพสต์ที่กำหนดเอง คุณต้องใช้ WP_query เพื่อตรวจสอบประเภทโพสต์ที่กำหนดเอง และในอาร์กิวเมนต์ คุณจะต้องส่งประเภทโพสต์ที่กำหนดเองใน post_type แล้วใช้รหัสการแบ่งหน้าเพื่อสร้างการแบ่งหน้า WordPress สำหรับประเภทโพสต์ที่กำหนดเอง

ต่อไปนี้คือรหัสที่คุณควรเพิ่มลงใน functions.php และแทนที่ post_type ด้วยกระสุนประเภทโพสต์ที่คุณกำหนดเอง:

 <?php 

/**
 * การแบ่งหน้า WordPress สำหรับประเภทโพสต์ที่กำหนดเอง  
 */ 
 
 <?php

 $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'เพจ' ) : 1;

	$args = อาร์เรย์ (
		 'post_type' => 'custom_post_type_name',
		 'posts_per_page' => 10,
		 'paged' => $paged
	);

	$loop = ใหม่ WP_Query( $args );

	ในขณะที่ ( $loop->have_posts() ) : $loop->the_post();
 
 // เนื้อหาประเภทโพสต์ที่กำหนดเอง 
 
ในที่สุด;
?>
<nav class="pagination">
     <?php
     ใหญ่ = 999999999;
     echo paginate_links (อาร์เรย์ (
          'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
          'format' => '?paged=%#%',
          'ปัจจุบัน' => สูงสุด( 1, get_query_var('paged') ),
          'total' => $loop->max_num_pages,
          'prev_text' => '&laquo;',
          'next_text' => '&raquo;'
     ) );
?>
</nav>
<?php wp_reset_postdata(); ?>

#5 Custom Query Pagination WordPress

รหัสการแบ่งหน้าแบบสอบถามที่กำหนดเองใน WordPress ใช้ WP_query เพื่อรับโพสต์เฉพาะที่เราต้องการแบ่งหน้า จากนั้นรวมผลลัพธ์ของการสืบค้นด้วยรหัสการแบ่งหน้าเพื่อใช้การแบ่งหน้ากับบทความเฉพาะที่เราเลือก ต่อไปนี้คือตัวอย่างการแบ่งหน้าคิวรีแบบกำหนดเองใน WordPress

 <?php

// แบบสอบถามที่กำหนดเอง 

$paged = ( get_query_var( 'paged' ) ) ? absint(get_query_var( 'เพจ' ) ) : 1;
 
$args = อาร์เรย์ (
    'posts_per_page' => 5,
    'category_name' => 'แกลเลอรี่',
    'paged' => $paged,
);
 
$the_query = ใหม่ WP_Query( $args );
?>
<!-- วง ฯลฯ.. -->

<?php

// การแบ่งหน้า 
ใหญ่ = 999999999; // ต้องการจำนวนเต็มที่ไม่น่าเป็นไปได้
 
echo paginate_links (อาร์เรย์ (
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'ปัจจุบัน' => สูงสุด( 1, get_query_var('paged') ),
    'total' => $the_query->max_num_pages
) );

บทสรุป

ในบทความนี้ เราได้เน้นประเภทการแบ่งหน้าของ WordPress และแบ่งปันรหัสการแบ่งหน้าเฉพาะเพื่อใช้สำหรับแต่ละกรณี โค้ดการแบ่งหน้าใน WordPress นี้สามารถเพิ่มลงในธีมหรือปลั๊กอินที่มีอยู่ได้ และสามารถเพิ่มลงใน WordPress เป็นปลั๊กอินแบบสแตนด์อโลนได้เช่นกัน