Paged posting - cara menggunakan angka dan tautan berikutnya / sebelumnya?


17

Saya ingin wp_link_pages (posting halaman mutli) untuk menampilkan nomor halaman, kata "sebelumnya" sebelum angka-angka itu, dan "berikutnya" setelah angka-angka itu. Akan terlihat seperti ini:

Sebelumnya 1, 2, 3, 4 Selanjutnya

Saya mencoba melakukan ini tanpa plugin. Inilah yang saya coba sejauh ini, tetapi tidak berhasil, hanya menampilkan angka.

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

Jawaban:


12

Fungsi yang Anda gunakan, wp_link_pagesCodex , tidak memiliki fitur yang Anda cari secara default.

Namun Anda dapat dengan mudah memperpanjangnya dengan menggunakan fungsi panggilan balik, terdaftar sebagai filter pada argumen fungsi itu:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Filter kemudian akan memodifikasi parameter yang digunakan dalam fungsi tersebut sambil jalan dan menyuntikkan tautan yang hilang ke prevdan nextargumen yang ditampilkan di sisi kiri dan kanan daftar tautan bernomor ( 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;
}

Pemakaian:

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 )
);

Jika tema Anda selalu menggunakan tautan prev dan next, maka Anda dapat sedikit mengubah fungsinya untuk menjadikannya perilaku default setiap kali number(default) digunakan, jadi Anda perlu menulis lebih sedikit dalam tema Anda.

Ini adalah implementasi yang sedikit berbeda seperti yang disarankan oleh Velvet Blues .


Kecuali untuk beberapa komentar dan pengembalian awal, implementasi, nama opsi, dan penjelasannya persis sama dengan saya. Apakah saya mengabaikan sesuatu? Apa manfaat yang diberikan solusi Anda? Terima kasih.
Velvet Blues

Mungkin ketika saya membandingkan kode.
hakre

Solusi Hakre tersedia selama pertanyaannya ada di sini. Jawaban lengkap (= dapat dipahami tanpa mengandalkan sumber eksternal) selalu lebih disukai di StackExchange.
fuxia

6

The wp_link_pages()Fungsi hanya menunjukkan baik teks atau nomor, tidak pernah baik. Jika Anda melihat kode fungsi, Anda akan melihat bahwa tidak ada opsi untuk membuatnya berperilaku berbeda dengan melewatkan parameter.

Yang sedang berkata, ada tiga cara untuk melakukan ini tanpa plugin:

  1. Buat fungsi Anda sendiri di file functions.php tema Anda. Berfungsi, tetapi Anda akan memiliki fungsi baru.
  2. Gunakan 2-3 contoh dari wp_link_pages(). Retasan yang sangat tidak efisien.
  3. Gunakan filter. Metode yang disukai . Lihat di bawah.

Saya telah menulis artikel tentang bagaimana melakukan ini di blog saya. Pada dasarnya, saya menggunakan filter wp_link_pages_args dan menambahkan fungsi dalam file functions.php yang menambahkan opsi baru 'next_and_number'.

Hack WordPress: Menampilkan Nomor & Tautan Berikutnya / Sebelumnya dengan wp_link_pages ()


Cool man ... Saya sedang memikirkan sesuatu menggunakan 4 nilai global, tetapi tidak pernah benar-benar menemukan solusi ... +1!
Rutwick Gangurde

3

Coba ini, Anda bisa lebih menyesuaikannya. Tapi itu harus dilakukan sesuai keinginan Anda :-)

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

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

bagaimana kita bisa mengatur? wordpress.org/support/topic/… atau cara menambahkan dynamic-custom-title sebelum nomor halaman.
ravi patel

1

Saya tidak mengerti apa masalahnya ... Apakah Anda memiliki kesalahan?

Ini seharusnya bekerja:

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

wp_link_pages($args);
?> 

Anda tidak perlu menambahkan next_or_number karena angka sudah merupakan default.


Untuk beberapa alasan ini tidak berfungsi, tetapi tampaknya tepat bagi saya. Saya ingin tahu apakah ada perubahan ke 3.3 atau jika saya perlu menempelkan sesuatu ke functions.php?
AndrettiMilas

2
Ya saya mencoba ini juga, ia bekerja ketika Anda mengatur next_or_numberuntuk next. Tapi itu hanya menampilkan tautan 'Berikutnya' dan 'Sebelumnya', bukan angka!
Rutwick Gangurde

1
Saya membutuhkan keduanya, seperti yang ditunjukkan dalam contoh.
AndrettiMilas

1

Kode ini ada di loop posting? Pengodean tidak masalah bagi saya. Berikut adalah contoh Codex tentang cara menggunakan:

<?php

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

?>

Kode ini tidak berfungsi.
AndrettiMilas

Kode diperbaiki. Maaf. Beberapa atribut tanpa nilai.
Caio Alves

1
Ini tidak mencapai hasil yang saya cari dalam pertanyaan saya, itu hanya menunjukkan angka.
AndrettiMilas

0

Jawabannya berbeda, tetapi terinspirasi @ 荒野 无 灯 yang memutuskan untuk menghapus jawabannya. Imho itu yang terbaik, sebagai solusi paling mudah dan fleksibel:

Solusinya tergantung pada paginate_links(). Satu-satunya hal yang perlu diketahui adalah bahwa itu baseakan menjadi URl dari awal, ditambahkan oleh %_%, yang kemudian akan digantikan oleh format. Jadi selama kita menggunakan get_permalink().'%_%';, kita tahu bahwa kita akan tetap pada pos saat ini. Di dalam format, #diganti dengan nomor halaman:

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>";
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.