5 WordPress Pagination Code Snippets พร้อมตัวอย่าง [ง่ายถึงขั้นสูง]
เผยแพร่แล้ว: 2020-02-03หากคุณกำลังมองหาโค้ดการแบ่งหน้าที่ดีที่สุดใน 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' => '«', 'next_text' => '»' ) ); ?> </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 เป็นปลั๊กอินแบบสแตนด์อโลนได้เช่นกัน