카테고리 보관물: wordpress

wordpress

single-custom.php의 WP_Query 페이지 매김 게시물 유형 내의 각 게시물은 개별

내가하고자하는 것 :

WP_Querysingle-custom-post-type.php 템플릿 파일의 설정 페이지 매김

내가 뭘 한거지

1) “저자”라는 게시물 유형을 작성했습니다. 해당 게시물 유형 내의 각 게시물은 개별 작성자입니다.

2) 표준 편집 게시물 화면 페이지에는 작성자 사용자 정의 게시물 유형의 모든 게시물 (작성자)을 나열하는 드롭 다운이 있습니다.

3) 드롭 다운에서 작성자 메타 데이터가있는 모든 게시물을 쿼리하는 single-authors.php 템플릿을 만들었으므로 결과는 동일한 작성자가 지정된 게시물 목록입니다 (아카이브 종류).

<?php

// set the "paged" parameter (use 'page' if the query is on a static front page)
global $paged;

/*We need this here to add and maintain Pagination if Template is assigned to Front Page*/
if ( get_query_var( 'paged' ) ) {
    $paged = get_query_var('paged');
} elseif ( get_query_var( 'page' ) ) {
    $paged = get_query_var( 'page' );
} else {
    $paged = 1;
}

$args = array(
    'posts_per_page'    =>  10,
    'meta_key'          => 'author_select',
    'meta_value'        => $author_id,
    'paged'             => $paged,
);

$temp = $wp_query;
$wp_query = NULL;

$wp_query = new WP_Query($args);

?>

<?php if( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <?php // Successfully outputs the results of the above query, so I've omitted the code from this example. ?>

    <?php endwhile; ?>

<div class="single_navigation">
    <?php if( get_adjacent_post( false, '', true ) ) { ?>
        <span class="prev"><?php previous_post_link( '&lt; %link' ) ?></span>
    <?php } ?>

    <?php if( get_adjacent_post( false, '', false ) ) { ?>
        <span class="next"><?php next_post_link( '%link &gt;' ) ?></span>
    <?php } ?>
    </div><!--/single navigation-->
<?php endif; ?>

<?php
    $wp_query = null;
    $wp_query = $temp;
    wp_reset_query();
?>

내가 붙어있는 것

페이지 매김 링크가 나타나지 않습니다. 몇 가지 연구를 수행하고 $wp_query변수 를 사용하는 $wp_query것으로 나타 났지만 쿼리 변수를로 변경 하면 링크가 나타나지만 클릭했을 때 아무것도 수행되지 않았습니다.

내가 잘못 가고있는 아이디어가 있습니까?

편집하다:

귀하의 질문 중 일부에 답하기 위해 쿼리에서 쿼리중인 게시물을 성공적으로 출력합니다. $ author_id에는 이미이 코드 스 니펫에 포함되지 않은 값이 있습니다. 마찬가지로 while 루프 내에서 실제 내용 출력을 생략했습니다. 그 부분은 문제가 아니기 때문입니다. 문제는이 단일 게시물에 이미 존재하는 내용을 페이지 매김해야한다는 것입니다.

이 기능의 목적은 게시물에 사용자 정의 작성자 (내장 사용자 시스템 외부에 있음)를 허용하는 것이 었으며이 템플리트의 목적은 지정된 작성자 (이미 작동중인)의 모든 게시물을 출력하는 것입니다.



답변

두 가지 문제가 있습니다.

첫 번째 문제

라인

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

URL이 포함 된 경우, 때문에 단일 포스트보기에, 실패 '/page/XX/', 변수 워드 프레스 세트가 'page'아니라 'paged'.

변수 대신 여러 페이지의 단일 게시물에 사용되도록 설정하고 (페이지를 사용하여 페이지 분리 ) 게시물이 여러 페이지가 아닌 경우 WordPress에서 요청을 리디렉션 하기 때문에 'page'대신 대신 사용 하는 것으로 생각할 수도 있습니다. 없는 URL로 .'paged''page'<!--nextpage-->'/page/XX/'

쿼리 변수 이름을 지정할 때 발생합니다 $wp_query.

용액은 그 기능에 대한 책임이있는, 제거하여 그 재를 방지하는 것이다 'redirect_canonical'에 후크를 'template_redirect':

따라서 functions.php추가 할 때 :

add_action( 'template_redirect', function() {
    if ( is_singular( 'authors' ) ) {
        global $wp_query;
        $page = ( int ) $wp_query->get( 'page' );
        if ( $page > 1 ) {
            // convert 'page' to 'paged'
            $wp_query->set( 'page', 1 );
            $wp_query->set( 'paged', $page );
        }
        // prevent redirect
        remove_action( 'template_redirect', 'redirect_canonical' );
    }
}, 0 ); // on priority 0 to remove 'redirect_canonical' added with priority 10

이제 WordPress가 더 이상 리디렉션되지 않으며 'paged'쿼리 var를 올바르게 설정합니다 .

두 번째 문제

next_posts_link()그리고 previous_posts_link()둘 다 if ( ! is_single() )페이지 매김을 표시합니다.

이제는 is_single()‘작성자’유형의 단일 게시물에 있으므로 해당 기능이 예상대로 작동하지 않기 때문에 귀하의 경우에는 사실입니다.

3 가지 가능성이 있습니다.

  1. query_posts기본 쿼리를 재정의하는 데 사용 (실제로 권장 되지 않음)
  2. 페이지에is_single() 대해서는 false 이므로 코드가 작동 하므로 사용자 정의 게시물 유형 대신 사용자 정의 페이지 템플릿을 사용하십시오 .
  3. 자신의 페이지 매김 함수를 작성하고 사용하십시오.

솔루션 번호 # 3의 코드입니다.

function my_pagination_link( $label = NULL, $dir = 'next', WP_Query $query = NULL ) {
    if ( is_null( $query ) ) {
        $query = $GLOBALS['wp_query'];
    }
    $max_page = ( int ) $query->max_num_pages;
    // only one page for the query, do nothing
    if ( $max_page <= 1 ) {
        return;
    }
    $paged = ( int ) $query->get( 'paged' );
    if ( empty( $paged ) ) {
        $paged = 1;
    }
    $target_page = $dir === 'next' ?  $paged + 1 : $paged - 1;
    // if 1st page requiring previous or last page requiring next, do nothing
    if ( $target_page < 1 || $target_page > $max_page ) {
        return;
    }
    if ( null === $label ) {
        $label = __( 'Next Page &raquo;' );
    }

    $label = preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label );
    printf( '<a href="%s">%s</a>', get_pagenum_link( $target_page ), esc_html( $label ) );
}

그리고 다음과 같이 사용하십시오 single-authors.php:

my_pagination_link( 'Older Entries', 'next', $author_query );
my_pagination_link( 'Newer Entries', 'prev', $author_query );

답변

다른 유사한 WPSE 질문 인 ” 페이지 매김이 wp_query 사용자 정의 필드 값을 작동하지 않습니다global $paged;에 따라 템플릿 파일의 시작 부분에 추가 하는 것이 좋습니다 .

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

답변