Bài viết phân trang - làm thế nào để sử dụng số và liên kết tiếp theo / trước?


17

Tôi muốn wp_link_pages (bài đăng trên trang mutli) hiển thị số trang, từ "trước" trước các số đó và "tiếp theo" sau các số đó. Nó sẽ trông như thế này:

Trước 1, 2, 3, 4 Tiếp theo

Tôi đang cố gắng làm điều này mà không có plugin. Đây là những gì tôi đã thử cho đến nay, nhưng nó không hoạt động, nó chỉ hiển thị số.

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

Câu trả lời:


12

Chức năng bạn đang sử dụng, wp_link_pagesCodex , không có tính năng bạn đang tìm kiếm theo mặc định.

Tuy nhiên, bạn có thể dễ dàng mở rộng nó bằng cách sử dụng hàm gọi lại, được đăng ký làm bộ lọc trên các đối số của hàm đó:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Sau đó, bộ lọc sẽ sửa đổi các tham số được sử dụng trong chức năng đó một cách nhanh chóng và đưa các liên kết còn thiếu vào prevvà các nextđối số được xuất ra ở bên trái và bên phải của danh sách liên kết được đánh số ( 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;
}

Sử dụng:

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

Nếu chủ đề của bạn luôn sử dụng liên kết trước và liên kết tiếp theo, thì bạn có thể thay đổi chức năng một chút để biến nó thành hành vi mặc định bất cứ khi nào number(mặc định) được sử dụng, do đó bạn cần viết ít hơn trong các chủ đề của mình.

Đây là một cách thực hiện hơi khác theo đề xuất của Velvet Blues .


Ngoại trừ một vài bình luận và trả lại sớm, việc triển khai, tên tùy chọn và giải thích hoàn toàn giống với tôi. Tôi đang nhìn cái gì đó? Giải pháp của bạn mang lại lợi ích gì? Cảm ơn.
Velvet Blues

Có lẽ khi tôi so sánh mã.
hakre

Giải pháp của Hakre có sẵn miễn là câu hỏi ở đây. Câu trả lời đầy đủ (= dễ hiểu mà không cần dựa vào các nguồn bên ngoài) luôn được ưu tiên trên StackExchange.
fuxia

6

Các wp_link_pages()chức năng chỉ cho thấy một trong hai văn bản hoặc số, không bao giờ cả. Nếu bạn xem mã của hàm, bạn sẽ thấy rằng không có tùy chọn nào để làm cho nó hoạt động khác đi bằng cách truyền tham số.

Điều đó đang được nói, có ba cách để làm điều này mà không cần một plugin:

  1. Tạo chức năng của riêng bạn trong tệp tin.php của chủ đề. Hoạt động, nhưng sau đó bạn có một chức năng mới.
  2. Sử dụng 2-3 trường hợp wp_link_pages(). Hack rất kém hiệu quả.
  3. Sử dụng bộ lọc. Phương pháp ưa thích . Xem bên dưới.

Tôi đã viết một bài viết về cách làm điều này trên blog của tôi. Về cơ bản, tôi sử dụng bộ lọc wp_link_pages_args và thêm một hàm trong tệp tin.php để thêm tùy chọn mới 'next_and_number'.

WordPress Hack: Số hiển thị & Liên kết tiếp theo / trước với wp_link_pages ()


Người đàn ông tuyệt vời ... Tôi đã nghĩ về một cái gì đó bằng cách sử dụng 4 giá trị toàn cầu, nhưng chưa bao giờ thực sự đi xuống một giải pháp ... +1!
Rutwick Gangurde

3

Hãy thử điều này, bạn có thể tùy chỉnh nó nhiều hơn. Nhưng nó nên làm như bạn muốn :-)

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

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

Làm thế nào chúng ta có thể quản lý? wordpress.org/support/topic/ , hoặc cách thêm tiêu đề động tùy chỉnh trước số trang.
ravi patel

1

Tôi không hiểu vấn đề là gì ... Bạn có lỗi gì không?

Điều này sẽ làm việc:

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

wp_link_pages($args);
?> 

Bạn không cần thêm next_or_number vì số này đã là mặc định.


Vì một số lý do, điều này không hiệu quả, nhưng nó có vẻ đúng với tôi. Tôi tự hỏi nếu có một sự thay đổi thành 3.3 hoặc nếu tôi cần phải dán một cái gì đó vào hàm.php?
AndrettiMilas

2
Có tôi cũng đã thử điều này, nó hoạt động khi bạn đặt next_or_numberthành next. Nhưng nó chỉ hiển thị các liên kết 'Tiếp theo' và 'Trước đó', không hiển thị các số!
Rutwick Gangurde

1
Tôi cần cả hai, như trong ví dụ.
AndrettiMilas

1

Mã này là trên vòng lặp của bài viết? Mã hóa là OK với tôi. Dưới đây là ví dụ về Codex về cách sử dụng:

<?php

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

?>

Mã này không hoạt động.
AndrettiMilas

Mã cố định. Lấy làm tiếc. Một số thuộc tính không có giá trị.
Caio Alves

1
Điều này không đạt được kết quả mà tôi đang tìm kiếm trong câu hỏi của tôi, nó chỉ hiển thị số.
AndrettiMilas

0

Câu trả lời là khác nhau, nhưng nó đã được truyền cảm hứng @ người quyết định xóa câu trả lời của mình. Imho là giải pháp tốt nhất và linh hoạt nhất:

Các giải pháp phụ thuộc vào paginate_links(). Điều duy nhất cần biết là đó basesẽ là URl ngay từ đầu, được thêm vào %_%, sau đó sẽ được thay thế bằng format. Vì vậy, miễn là chúng tôi sử dụng get_permalink().'%_%';, chúng tôi biết rằng trong mọi trường hợp chúng tôi sẽ ở lại bài viết hiện tại. Bên trong format, #được thay thế bởi số trang:

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>";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.