현재 페이지 번호 받기


15

페이지 당 20 개의 게시물이있는 상황. 하단에 멋진 페이지 링크를 만들기 위해 현재 페이지 번호를 얻고 싶습니다. 현재 페이지를 어떻게 얻습니까? 나는 이것을 시도했다

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

모든 페이지에 1의 1 페이지 만 표시됩니다.

어떤 아이디어라도

기이

답변:


23

WordPress에서 이와 같은 페이지 매김을 사용 $paged하는 경우 키 입력 하는 쿼리 변수 가 있습니다. 따라서 1 $paged=1페이지는 15 페이지는 $paged=15입니다.

다음 코드를 사용하여이 변수의 값을 얻을 수 있습니다.

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

총 페이지 수를 얻는 것은 약간 까다 롭습니다. 먼저 데이터베이스의 모든 게시물을 계산해야합니다. 그런 다음 게시물이 게시되는 기준 (임시, 예약, 휴지통 등)을 필터링합니다. 그런 다음 이 수를 각 페이지에 나타날 것으로 예상되는 게시물 수로 나누어야합니다.

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

아직 테스트하지는 않았지만을 사용하여 $posts_per_page가져온 것과 같은 방식 으로 가져와야 할 수도 있습니다 .$pagedget_query_var()


8
왜 사용하지 $wp_query->max_num_pages않습니까?
t31os

1
그것은 좋은 대안입니다. $wp_query내가 완전히 잊어 버린 부분은 :-/
EAMann

@EAMann BTW : found_posts"현재 쿼리 매개 변수와 일치하는 총 게시물 수"속성 도 있습니다. wp_count_posts ()는 일종의 오버 헤드입니다.
jave.web

8

한 줄의 코드로 수행 할 수 있지만 다시 다른 장소에 코드를 추가 할 수 있으므로 기능이 더 유용합니다.

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

참고 : 코드는 함수 파일로 이동할 수 있습니다.

예를 들어 "Page x of y"메시지를 표시하려는 함수를 호출하면됩니다.

<?php current_paged(); ?>

사용자 정의 쿼리로 작업하기 위해 코드가 필요한 경우, 즉 를 사용하여 생성 WP_Query한 다음 쿼리를 함수에 보유하는 변수의 이름을 전달하십시오.

존재하지 않는 쿼리 예 :

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

이전에 게시 된 함수를 사용하여 사용자 정의 쿼리에 대한 현재 페이지 가져 오기 ..

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

사용자 지정 쿼리 지원을 완전히 잊고 원 라이너를 찾고 있다면 그렇게해야합니다.

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

희망이 도움이 .. :)


1
내가 당신이라면 나는 $var쿼리 인지 확인 합니다 : if( is_a( $var, 'WP_Query' ) )그것이 쿼리 객체라면 true를 반환합니다.
John P Bloch

예, 그것은 실제로 매우 현명한 아이디어입니다.
t31os

0

위에서 언급했듯이 최대 페이지 수를 얻는 간단한 방법은 다음과 같습니다.

global $wp_query

$wp_query->max_num_pages

0

모든 아카이브 페이지에서 작동하는 옵션은 다음과 같습니다.

$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>'; 

}

이 페이지에 둘 이상의 페이지가 있으면 먼저 쿼리 wp_query한 다음 제목을 현재 페이지 비아 $paged_current_page와 총 페이지 수로 연결하십시오 $title_page_nrs. 마지막으로 echo그것. 1 페이지 이상인 else경우 if는 페이징되지 않습니다. 이것은 내 archive.php 또는이 유형의 템플릿으로 이동합니다. 다음을 생성합니다.

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

또는

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.