4.4에서 <!-nextpage->로 깨진 내용 추가


14

2016-01-21 업데이트

내 현재 모든 테스트는 다음 설정으로 4.4.1을 새로 설치하여 수행됩니다. Plain permalinks Twentysixteen Theme No plugins activated

게시물에 1 페이지 만있는 경우 (즉 <!--nextpage-->, 게시물에 나타나지 않는 경우) 추가 페이지가 여러 개 추가 된 경우에도 추가 페이지가 성공적으로 추가됩니다 ¹.

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

게시물이 2+ 페이지갖는 경우, 추가 페이지 ( 404) 및 표준 페이지는 게시물의 1 페이지로 리디렉션 된다.

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

<!--nextpage-->

This is page 2

두 번째 경우 $wp_query->queried_object에는 추가 페이지를 치면 비어 있습니다. 이 정보를 보려면 표준 리디렉션을 비활성화해야합니다.remove_filter('template_redirect', 'redirect_canonical');

다음 코어 픽스 모두 동작을 변경하지 않고 개별적으로 함께 시도했습니다. https://core.trac.wordpress.org/ticket/35344#comment:16

https://core.trac.wordpress.org/ticket/35344#comment:34

사용하기 쉽도록 이것은 현재 테스트중인 코드입니다.

add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
    global $post;
    $content = "\n<!--nextpage-->\nThis is the extra page v1";
    $post->post_content .= $content;
}

add_filter('content_pagination', 'custom_content_two', 10, 2);
function custom_content_two($pages, $post) {
    if ( in_the_loop() && 'post' === $post->post_type ) {
        $content = "This is the extra page v2";

        $pages[] = $content;
    }
    return $pages;
}

add_action('the_post', 'custom_content_three');
function custom_content_three() {
    global $multipage, $numpages, $pages;
    $content = "This is the extra page v3";

    $multipage = 1;
    $numpages++;
    $pages[] = $content;
}

¹ 이것은 단일 페이지 게시물에서 여러 개의 추가 페이지를 테스트하는 데 사용한 코드입니다

add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
    global $post;
    $content = "\n<!--nextpage-->\nThis is the extra page v1-1\n<!--nextpage-->\nThis is the extra page v1-2\n<!--nextpage-->\nThis is the extra page v1-3";
    $post->post_content .= $content;
}

원래 질문

4.4 이전에는 다음과 같이 추가 페이지를 다중 페이지 게시물에 추가 할 수있었습니다.

add_action('template_redirect', 'custom_content');
function custom_content() {
    global $post;
    $content = html_entity_decode(stripslashes(get_option('custom_content')));
    $post->post_content .= $content;
}

get_option ( 'custom_content')은 다음과 같습니다.

<!--nextpage-->
Hello World

4.4로 업그레이드 한 이후에는 코드가 작동하지 않았습니다. 추가 페이지로 이동하면 404 오류가 발생하고 redirect_canonical 은 해당 오류를 게시물의 영구 링크로 다시 보냅니다. redirect_canonical을 비활성화하면 추가 페이지를 볼 수 있으며 추가 콘텐츠가 있지만 여전히 404 오류가 발생합니다.

여러 가지 해결 방법을 시도했지만 404 오류를 해결하는 방법은 없습니다.

add_action('the_post', 'custom_content');
function custom_content() {
    global $multipage, $numpages, $pages;
    $content = html_entity_decode(stripslashes(get_option('custom_content')));

    $multipage = 1; // ensure post is considered multipage: needed for single page posts
    $numpages++; // increment number of pages
    $pages[] = $content;
}

4.4에 추가 된 새로운 content_pagination 필터를 활용 해 보았습니다 .

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $content = html_entity_decode(stripslashes(get_option('custom_content')));

    $pages[] = $content;
    return $pages;
}

이 시점에서이 기능을 복원하는 방법에 대한 아이디어가 없으며 도움을 주시면 감사하겠습니다.


좋아, 불행히도 이것은 긍정적이지 않습니다. 여분의 페이지가 2 페이지 인 경우 새로 설치에서 작동하지만 여분의 페이지가 3 페이지 이상인 경우 중단됩니다. / wrist
Milamber

1
버그를 발견했습니다 !!!!! 네!!!!. 내 답변을 곧 업데이트하겠습니다
Pieter Goosen

답변:


8

업데이트 21-01-2016 19:35 SA 시간-버그 발견 !!!!! 네!!!!!!

마침내 버그를 발견했습니다. 마지막 업데이트에서 언급했듯이 콘텐츠에 태그 $post_content가있는 경우에만 오류가 발생 <!--nextpage-->합니다. 나는 그것을 테스트하고 페이지 뒤의 다른 페이지 <!--nextpage-->가 404를 반환 한 다음 페이지가 첫 페이지로 다시 리디렉션되는지 확인했습니다.

이로 인해 다음 코드 줄 에서 handle_404()에 도입 된 방법 WP클래스 워드 프레스 4.4

// check for paged content that exceeds the max number of pages
$next = '<!--nextpage-->';
if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars['page'] ) ) {
    $page = trim( $this->query_vars['page'], '/' );
    $success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
}

이 코드의 기능은에서 <!--nextpage-->태그가 설정 될 때마다 필터 post_content를 통해 콘텐츠 뒤에 추가되는 페이지에 액세스 할 때 404를 반환합니다 content_pagination. 404가 설정 redirect_canonical()되어 있으므로 추가 된 페이지를 첫 번째 페이지로 다시 리디렉션합니다.

여기에서 확인할 수있는이 문제에 대한 trac 티켓을 제출했습니다.

글을 쓰는 시점에서 아직 피드백이 없었으므로 티켓 상태를 정기적으로 확인하십시오

현재 솔루션-A / W TRAC TICKET 피드백

현재로서는 다음 릴리스에서 피드백과 가능한 수정 사항을 얻을 WP때까지 추가 통지가있을 때까지 클래스 에서 해당 행을 삭제하십시오.

시간이 얼마입니까 ..... 디버깅 시간입니다 !!!!!

나는 이것을 완전히 테스트 할 시간이 있었다. 코드를 가져 와서 테스트했습니다.

  • 내 v4.3 로컬 설치

  • 내 v4.4.0 로컬 설치

  • 내 v4.4.1 로컬 설치

  • Hello World게시물과 Sample Page페이지 만으로 새로운 v4.4.1 로컬 설치 완료

내 영구 링크를

  • default

  • Post Name

내 테스트 게시물 안에 4 페이지를 만드는 테스트 코드는 다음과 같습니다.

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $pages_to_add = [
        'Hello World Page 2',
        'Hello World Page 3',
        'Hello World Page 4',
    ];

    foreach ( $pages_to_add as $page_to_add ){
        $pages[]  = html_entity_decode(
            stripslashes(
                $page_to_add
            )
        );
    }

    return $pages;
}

나는 또한 테스트

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $pages_to_add = [
        '<!--nextpage--> Hello World Page 2',
        '<!--nextpage--> Hello World Page 3',
        '<!--nextpage--> Hello World Page 4',
    ];

    foreach ( $pages_to_add as $page_to_add ){
        $pages[]  = html_entity_decode(
            stripslashes(
                $page_to_add
            )
        );
    }

    return $pages;
}

좋은 측정을 위해

각각의 모든 설치 및 퍼머 링크 구조에서 모든 코드가 작동합니다 (예 : on v4.3 제외content_pagination ).

또한 Sample Page정적 프론트 페이지로 설정 했지만 ORIGINAL ANSWER 및 ** EDIT에 설명 된 버그에 대한 구성으로 2 페이지에서 실패했습니다.

결론은 코어의 버그 또는 코어의 다른 버그와 관련이 없다는 것입니다. 주석에서 무언가가 페이지 된 게시물 페이지에서 쿼리 된 개체를 설정 해제하고 있으며 이는 디버깅해야하는 것입니다. 불행히도이 문제는 현재 현지화되어 있으므로 정확한 해결책을 제시 할 수 없습니다.

문제 파악

문제를 디버깅하려면 다음 워크 플로우를 사용해야합니다.

  • 설탕이 많은 카페인 커피

  • 당신의 DB를 백업

  • 다음 플러그인을 다운로드하여 설치하십시오 ( 나는 어떤 플러그인과도 관련이 없습니다 )

    • 정상적인 디버깅을위한 디버그 객체 . 일단 설치 및 설정되면 플러그인에 의해 강조 될 수있는 모든 명백한 버그를 복구하십시오. 명백한 버그가있는 경우 다음 주요 글 머리 기호로 계속 진행하지 마십시오. 먼저 수정

    • 다음 글 머리 기호를 계속하기 전에 DB를 복구 및 정리하는 데 사용할 DB 관리자

  • 모든 캐시, 브라우저 및 플러그인 지우기

  • 모든 플러그인을 비활성화하고 모든 캐시를 다시 지우십시오. 이 문제는 리디렉션 문제처럼 보이므로 먼저 리디렉션과 관련이있을 수있는 모든 플러그인을 비활성화해야합니다. 하나의 플러그인이 아직 v4.4와 호환되지 않을 수 있습니다. 문제가 지속되면 다음 글 머리 기호로 계속 진행하십시오. 그렇지 않으면 더 자세히 살펴 보겠습니다.

    모든 플러그인을 비활성화하여 시작하십시오. 또한 문제를 일으킬 수있는 플러그인을 비활성화하여 시작할 수도 있습니다. 각 플러그인을 활성화 한 후 설치를 올바르게 테스트하십시오. 문제를 일으킨 최초의 플러그인이 범인이 될 것입니다. 이 경우 디버깅 세부 정보를 사용하여 플러그인 작성자에게 문의하십시오. 플러그인을 활성화 한 후에는 캐시를 지우십시오.

  • 이 시점에 도달하면 이전 글 머리 기호로 문제가 해결되지 않았습니다. 다음 단계는 번들 테마로 전환하여 테마를 문제로 제거하는 것입니다. 다시 한 번 캐시를 지우십시오.

  • 모든 것이 실패하면 두 가지 옵션이 더 남습니다

    • 삭제 .htaccess하고 워드 프레스가 새로운 것을 작성하게하십시오

    • 워드 프레스 재설치

문제가 해결 될 것입니다. 그렇지 않은 경우 WordPress 코어에서 문제를 일으킬 수있는 버그를 고려해야합니다.

이것이 버그를 잡는 데 도움이되기를 바랍니다.

최신 정보

나는 모든 것을 더 자세히 설명하는 것처럼 보이는 다음과 같은 trac 티켓과 실제로 연결되어 있어야합니다

위의 trac 티켓의 흥미롭고 관련성이 높은 패치

현재로서는 구체적으로 테스트 할 수는 없지만 제안 된 패치를 수행하여 테스트해야합니다. 내가 선택할 수있는 것은 동일한 코드가redirect_canonical() 있는 것은 정적 프론트 페이지의 페이지 매김을 담당 단일 페이지의 페이지 매김을 담당한다는 것입니다.

원래 답변

정적 페이지 와 같은 단일 페이지 는 get_query_var( 'page' )페이지 매김에 사용 됩니다. WordPress 4.4 ( 및 v4.4.1 )에서는 페이지 매김에 사용할 때 페이지 매김 문제가 발생하는 버그가 발생했습니다 get_query_var( 'page' ).

trac ticket # 35365 와 같은 현재 버그 보고서 는 페이지 매김에 문제가있는 정적 프론트 페이지 만 언급하지만 버그와 get_query_var( 'page' )관련하여 단일 포스트 페이지 매김에 문제가 발생할 것이라고 생각합니다.get_query_var( 'page' ) .

trac 티켓에 설명 된대로 패치를 시도해야합니다. 이 작업이 작동하면 패치를 적용하고 v4.4.2를 기다릴 수 있습니다.이 버그는 수정되었습니다.


1
잘만되면 이것은 OP의 문제이며, 아마도 (현재 이것을 파헤칠 수는 없습니다.
birgire

1
수정을 시도하고 영구 링크를 비활성화했습니다. 변경 없음.
Milamber

1
시간이 되 자마자 이것으로 조사하겠습니다. 나는 대답이 버그에 있다고 생각합니다. 그냥 추적하는 것입니다. 곧 해결책을 찾아 낸다
피터 구센

2
내 업데이트를 확인하고 버그를 발견했으며 버그 보고서도 제출했습니다.
Pieter Goosen

2
3 방법은 그 라인이 주석되면 :) 폐쇄 작동하는지 확인 된 티켓 35544을 당신의 찬성
Milamber

4

제공 한 세 가지 예 모두에 대해 구문 오류가 있습니다.

add_filter('content_pagination', 'custom_content'), 10, 2);

add_action('the_post', 'custom_content'));

add_action('template_redirect', 'custom_content'));

여분 )이 추가 되는 곳 .

이 줄들을 다음과 같이 바꾸십시오 :

add_filter( 'content_pagination', 'custom_content', 10, 2);

add_action( 'the_post', 'custom_content' );

add_action( 'template_redirect', 'custom_content' );

나는 일반적으로 전역 객체를 어지럽히는 것을 권장하지 않으므로 content_pagination필터 를 사용한 마지막 예제가 여기에 오는 방법 이라고 생각합니다 .

다음과 같이 빈 페이지를 추가하지 않을 수도 있습니다.

if( ! empty( $content ) )
    $pages[] = $content;

)여기 에 누락이 있습니다.

$content = html_entity_decode(stripslashes(get_option('custom_content'));

1
내 실수, 여분의)은 실제 구현과 함께 클래스에서 복사하여 붙여 넣지 않아도됩니다. 작전에서 그것들을 제거했습니다. 불행하게도 content_pagination 버전은 404 오류도 수정하지 않습니다.
Milamber

1
$ content 줄에 누락 된 부분도 있습니다 (업데이트 참조). @Milamber
birgire

1
고마워요 op 코드에 표시되는 구문 오류는 게시물에 맞게 단순화하는 것입니다.
Milamber

2
좋아, 나는 이것을 Twenty Sixteen 테마로 바닐라 WP 4.4 설치에서 테스트했으며 예상대로 작동하므로 설치에서 문제가되는 다른 것으로 생각됩니다. @Milamber
birgire

1
이상한, 나는 Twentyfifteen과 2 개의 다른 dev 환경에서 시도했으며 둘 다 동일한 결과를 얻었습니다. @birgire
Milamber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.