Lấy số trang hiện tại


13

Trong một tình huống mà một người có 20 bài viết trên mỗi trang. Tôi muốn lấy số trang hiện tại để tạo một số liên kết trang đẹp ở phía dưới. Làm thế nào để bạn có được trang hiện tại. Tôi đã thử nó

<?php echo '(Page '.$page.' of '.$numpages.')'; ?>

và nó chỉ nói trang 1 trên 1 trên mỗi trang.

Bất kỳ ý tưởng,

Kỳ diệu

Câu trả lời:


21

Khi WordPress đang sử dụng phân trang như thế này, có một biến truy vấn $pagedmà nó bật. Vậy trang 1 là$paged=1 và trang 15 là $paged=15.

Bạn có thể nhận giá trị của biến này với đoạn mã sau:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Lấy tổng số trang là một chút khó khăn hơn. Đầu tiên bạn phải đếm tất cả các bài viết trong cơ sở dữ liệu. Sau đó, lọc theo đó các bài đăng được xuất bản (so với đó là bản nháp, lịch trình, thùng rác, v.v.). Sau đó, bạn phải chia số lượng này cho số lượng bài đăng bạn muốn xuất hiện trên mỗi trang:

$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );

Tôi chưa thử nghiệm điều này, nhưng bạn có thể cần tìm nạp $posts_per_pagegiống như cách bạn đã tìm nạp $paged(sử dụng get_query_var()).


8
Tại sao không sử dụng $wp_query->max_num_pages?
t31os

1
Đó là một sự thay thế âm thanh. Một phần của $wp_querytôi hoàn toàn quên mất là ở đó: - /
EAMann

@EAMann BTW: cũng có thuộc found_poststính "Tổng số bài đăng được tìm thấy khớp với các tham số truy vấn hiện tại", wp_count_posts () là một loại chi phí chung.
jave.web

7

Bạn có thể làm điều đó với một dòng mã, nhưng một lần nữa, bạn có thể muốn thêm mã ở những nơi khác, vì vậy một hàm thường hữu ích hơn.

function current_paged( $var = '' ) {
    if( empty( $var ) ) {
        global $wp_query;
        if( !isset( $wp_query->max_num_pages ) )
            return;
        $pages = $wp_query->max_num_pages;
    }
    else {
        global $$var;
            if( !is_a( $$var, 'WP_Query' ) )
                return;
        if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
            return;
        $pages = absint( $$var->max_num_pages );
    }
    if( $pages < 1 )
        return;
    $page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    echo 'Page ' . $page . ' of ' . $pages;
}

GHI CHÚ: Mã có thể đi vào tập tin chức năng của bạn.

Chỉ cần gọi hàm mà bạn muốn hiển thị thông báo "Trang x của y", vd.

<?php current_paged(); ?>

Nếu bạn cần mã để làm việc với một truy vấn tùy chỉnh, tức là. một cái bạn đã tạo bằngWP_Query , sau đó chỉ cần chuyển tên của biến chứa truy vấn vào hàm.

Ví dụ truy vấn không tồn tại:

$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() ) 
... etc..

Lấy trang hiện tại cho truy vấn tùy chỉnh bằng cách sử dụng chức năng được đăng trước đó ..

<?php current_paged( 'fred' ); ?>

Nếu bạn muốn hoàn toàn quên đi hỗ trợ truy vấn tùy chỉnh và bạn đang tìm kiếm một lớp lót, thì điều này nên làm điều đó ..

<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>

Mong rằng sẽ giúp .. :)


1
Nếu tôi là bạn, tôi sẽ kiểm tra xem có phải $varlà truy vấn không: if( is_a( $var, 'WP_Query' ) )sẽ trả về true nếu đó là đối tượng truy vấn.
John P Bloch

Vâng, đó thực sự là một ý tưởng rất hợp lý, được thực hiện!.
t31os

0

Như đã đề cập ở trên - một cách đơn giản hơn để có được số lượng trang tối đa là:

global $wp_query

$wp_query->max_num_pages

0

Một tùy chọn hoạt động trên tất cả các trang lưu trữ của tôi là:

$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;

if ( $paged_maxnum > 1 ) {

    $paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    $title_page_nrs = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; 

}

Truy vấn đầu tiên nếu có nhiều hơn một trang trong đó wp_query, sau đó nối tiêu đề với trang hiện tại thông qua $paged_current_pagevà tổng số trang với $title_page_nrs. Cuối cùng echonó. Nếu trên 1 trang đầu tiên, sau đó elsenếu không được phân trang. Điều này đi vào archive.php của tôi hoặc các mẫu cho loại này. Nó tạo ra:

<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>

hoặc là

<title>Taxonomy title | Your Website Name</title>

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.