쉽지 않을까요?! 맞춤 게시물 유형 / 맞춤 분류 체계


11

그래서 이것은 나를 미치게합니다. 나는 이것을 고치려고 노력하는 데 며칠을 보냈으며 이것이 매우 일반적인 permalink 구조이기 때문에 이것이 왜 어려운지 알아낼 수 없습니다!

나는 수백 개의 답변과 게시물을 살펴 보았지만 아무도 문제를 해결하지 못하는 것 같습니다.

나는 단순히이 구조를 원한다 :

mysite.com/custom-post-type/custom-taxonomy-term/post-name

그래서 나는 다음을 달성합니다.

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

무언가를 시도 할 때마다 404 오류가 발생하거나 페이지 매김이 작동하지 않습니다.

왜 이렇게 어려운지 이해가되지 않습니다!

도움이 정말 감사합니다!

감사합니다

===================================================== ==== ================== 추가 정보 ==================

현재 게시물 유형과 분류를 다음과 같이 등록하고 있습니다.

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

둘 다 'literature'로 등록하면 mysite.com/literature 페이지에 404가 표시되지만 내 영구 링크는 다음과 같이 표시됩니다. mysite.com/literature/books/mybook

이 질문에 대한 조언을 따른 후- 맞춤 게시물 유형, 분류법 및 영구 링크

나는 이것을 내 기능에 추가했다.

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

내 게시물 유형을로 'slug' => 'literature/%literature_category%' 변경하고 분류를'slug' => 'literature'

mysite.com/literature페이지 매김 이 작동 하지 않는다는 점을 제외하고는 훌륭하게 작동하므로 다음 URL에서 404 오류가 발생합니다.

mysite.com/literature/page/2/


호기심으로 지금까지 무엇을 시도 했습니까?
— Matthew Boynes

-이 대답은 나에게 가장 가까운 가지고 wordpress.stackexchange.com/questions/5308/...을 -하지만 그것은 하나 매김하고 작동하지 않았다 제안 플러그인 작동하지 않았다
— fxfuture

시원하고 기뻤습니다. 시간이 절약되었습니다!
— Matthew Boynes

답변:


6

이미 한 것처럼 이 질문 에 대한 조언을 따르십시오. 그러나 이것을 코드에 추가하십시오.

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

마지막으로 설정> 영구 링크로 이동하여 저장을 누르십시오. 여전히 작동하지 않으면 영구 링크를 다시 저장하십시오. 때때로 나는 당신이 그들을 두 번 구해야한다고 생각하지만 누가 압니다. 어쨌든, 당신이 어떻게 만드는지 알려주세요. 참고 컴퓨터 과학 표준 답변 # 1 적용 : 이 작품 저를 ... ;-)

TMI의 땅에서 ...

참고로, 페이지가 기본적으로 작동하지 않는 이유 는 WordPress가 Literature / % literature_category % / % book % / % page %에 대한 다시 쓰기 규칙을 설정했기 때문입니다. 따라서 기본 영구 링크에는 다음과 같은 순서로 경쟁 규칙이 있습니다.

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

우리가 실제로하고있는 모든 것은 후자를 설정 해제하여 순서를 변경하는 것입니다 (우리는 그것을 유지할 수 있지만 그 후에는 다시로드 할 때마다 페이지로드에서 실행할 정규 표현식이 하나 더 있습니다).

재미있는 사실 : "페이지"라는 제목의 "책"이 있고 여러 페이지가있는 경우이 순서가 충돌하여 후속 페이지가 작동하지 않습니다!


세상에, 내 문법이 잘못되었다는 생각이 들었습니다. 충분히 재미있어, 그것은 나를 위해 작동하고 내가 고치면 작동하지 않습니다. 나는 그것을 알아낼 때 그것을 유지하고 내 대답을 업데이트 할 것입니다 ...
— Matthew Boynes

도와 줘서 고마워 매튜 나는 그것을 시도했지만 불행히도 작동하지 않았다. 내 질문에 더 많은 정보를 추가하여 희망적으로 더 잘 설명했습니다!
— fxfuture 2012 년

1
알겠습니다. 혼란에 대해 사과드립니다. 거기에 약간의 뇌 가스가 있었음 (최근에 뇌 콩이 있었어야 함). 내 답변이 업데이트되었으며 다시 작동합니다. 영구 링크를 저장하십시오.
— Matthew Boynes

1
오, 네 업데이트 된 질문을 봤습니다. 따라서 / literature / fiction / page / 2가 작동하지 않는 것이 아니라 / literature / page / 2가 작동하지 않는 것이 맞습니까? 그렇다면 쉬운 해결 방법입니다. 동일한 수준에서 동일한 작업을 수행합니다
— Matthew Boynes

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