โพสต์ในเพจ - วิธีใช้ตัวเลขและลิงค์ถัดไป / ก่อนหน้า


17

ฉันต้องการ wp_link_pages (mutli-page posts) เพื่อแสดงหมายเลขหน้าคำว่า "ก่อนหน้า" ก่อนหน้าตัวเลขเหล่านั้นและ "ถัดไป" หลังจากตัวเลขเหล่านั้น มันจะมีลักษณะเช่นนี้:

ก่อนหน้า 1, 2, 3, 4 ถัดไป

ฉันกำลังพยายามทำสิ่งนี้โดยไม่มีปลั๊กอิน นี่คือสิ่งที่ฉันได้ลองมาแล้ว แต่มันไม่ทำงานมันเป็นเพียงการแสดงตัวเลข

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

คำตอบ:


12

ฟังก์ชั่นที่คุณใช้คือwp_link_pagesCodexไม่มีคุณสมบัติที่คุณค้นหาตามค่าเริ่มต้น

อย่างไรก็ตามคุณสามารถขยายได้อย่างง่ายดายโดยใช้ฟังก์ชั่นการโทรกลับที่ลงทะเบียนเป็นตัวกรองในข้อโต้แย้งฟังก์ชั่นที่:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

ตัวกรองจะปรับเปลี่ยนพารามิเตอร์ที่ใช้ในฟังก์ชั่นนั้นแบบon-the-flyและฉีดลิงค์ที่ขาดหายไปไปยังprevและnextอาร์กิวเมนต์ซึ่งเป็นเอาต์พุตทางด้านซ้ายและด้านขวาของรายการลิงค์หมายเลข ( next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

การใช้งาน:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

หากธีมของคุณมักจะใช้ก่อนหน้านี้และต่อไปการเชื่อมโยงจากนั้นคุณสามารถเปลี่ยนฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่จะทำให้มันทำงานเริ่มต้นเมื่อใดก็ตามที่number(ค่าดีฟอลต์) ถูกนำมาใช้เพื่อให้คุณต้องเขียนน้อยในรูปแบบของคุณ

นี่คือการใช้งานที่แตกต่างกันเล็กน้อยในขณะที่แนะนำโดยกำมะหยี่บลูส์


ยกเว้นความคิดเห็นเล็กน้อยและผลตอบแทนก่อนกำหนดการใช้งานชื่อตัวเลือกและคำอธิบายนั้นเหมือนกับของฉัน ฉันมองอะไรบางอย่าง โซลูชันของคุณให้ประโยชน์อะไรบ้าง ขอบคุณ
Velvet Blues

อาจเป็นเมื่อฉันเปรียบเทียบรหัส
hakre

โซลูชันของ Hakre พร้อมให้บริการตราบใดที่คำถามอยู่ที่นี่ คำตอบที่สมบูรณ์ (= เข้าใจได้โดยไม่ต้องพึ่งพาแหล่งภายนอก) เป็นที่ต้องการเสมอใน StackExchange
fuxia

6

wp_link_pages()ฟังก์ชั่นแสดงเฉพาะอย่างใดอย่างหนึ่งข้อความหรือจำนวนไม่เคยทั้งสอง หากคุณดูรหัสฟังก์ชั่นของคุณจะเห็นว่าไม่มีตัวเลือกที่จะทำให้มันทำงานแตกต่างกันโดยผ่านพารามิเตอร์

ที่ถูกกล่าวว่ามีสามวิธีในการทำเช่นนี้โดยไม่ต้องใช้ปลั๊กอิน:

  1. สร้างฟังก์ชั่นของคุณเองในไฟล์ functions.php ของธีม ใช้งานได้ แต่คุณจะมีฟังก์ชั่นใหม่
  2. ใช้ 2-3 wp_link_pages()กรณีของ แฮ็คที่ไม่มีประสิทธิภาพมาก
  3. ใช้ตัวกรอง วิธีที่ต้องการ ดูด้านล่าง

ฉันเขียนบทความเกี่ยวกับวิธีการทำเช่นนี้ในบล็อกของฉัน โดยทั่วไปฉันใช้ตัวกรองwp_link_pages_argsและเพิ่มฟังก์ชั่นในไฟล์ functions.php ซึ่งเพิ่มตัวเลือกใหม่ 'next_and_number'

WordPress Hack: แสดงหมายเลข & ลิงค์ถัดไป / ก่อนหน้ากับ wp_link_pages ()


เจ๋งคน ... ฉันกำลังคิดถึงบางสิ่งที่ใช้ค่านิยมระดับโลก 4 ค่า แต่ไม่เคยแก้ปัญหา ... +1!
Rutwick Gangurde

3

ลองนี้คุณสามารถปรับแต่งได้มากขึ้น แต่ควรทำตามที่คุณต้องการ :-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}

เราจะจัดการได้อย่างไร wordpress.org/support/topic/… หรือวิธีเพิ่มชื่อแบบกำหนดเองแบบไดนามิกก่อนหมายเลขหน้า
ravi patel

1

ฉันไม่ได้รับสิ่งที่เป็นปัญหา ... คุณมีข้อผิดพลาดหรือไม่?

สิ่งนี้น่าจะใช้ได้:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

คุณไม่จำเป็นต้องเพิ่ม next_or_number เนื่องจากหมายเลขนั้นเป็นค่าเริ่มต้นแล้ว


ด้วยเหตุผลบางอย่างนี้ใช้งานไม่ได้ แต่ดูเหมือนถูกต้องสำหรับฉัน ฉันสงสัยว่ามีการเปลี่ยนแปลงเป็น 3.3 หรือถ้าฉันต้องการวางบางสิ่งบางอย่างลงใน
AndrettiMilas

2
ใช่ฉันพยายามนี้เกินไปก็จะทำงานเมื่อคุณตั้งค่าการnext_or_number nextแต่จะแสดงเฉพาะลิงก์ 'ถัดไป' และ 'ก่อนหน้า' ไม่ใช่ตัวเลข!
Rutwick Gangurde

1
ฉันต้องการทั้งสองอย่างดังที่แสดงในตัวอย่าง
AndrettiMilas

1

รหัสนี้อยู่ในวงวนของโพสต์? การเข้ารหัสก็โอเคสำหรับฉัน นี่คือตัวอย่าง Codex เกี่ยวกับวิธีใช้:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>

รหัสนี้ใช้ไม่ได้
AndrettiMilas

รหัสได้รับการแก้ไข ขอโทษ คุณลักษณะบางอย่างไม่มีค่า
Caio Alves

1
นี่ไม่ได้ผลลัพธ์ที่ฉันต้องการในคำถามของฉันมันแสดงตัวเลขเท่านั้น
AndrettiMilas

0

คำตอบนั้นแตกต่างกันไป แต่เป็นแรงบันดาลใจ @ 荒野无灯ผู้ตัดสินใจลบคำตอบของเขา Imho มันดีที่สุดเพราะเป็นทางออกที่ง่ายและยืดหยุ่นที่สุด:

paginate_links()วิธีการแก้ปัญหาขึ้นอยู่กับ สิ่งเดียวที่จะรู้คือว่าbaseจะเป็น URL จากจุดเริ่มต้นโดยผนวกซึ่งจากนั้นจะถูกแทนที่ด้วย%_% formatดังนั้นตราบใดที่เราใช้get_permalink().'%_%';เรารู้ว่าเราจะอยู่ในโพสต์ปัจจุบัน ภายในformatที่#ได้รับการแทนที่ด้วยหมายเลขหน้า:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.