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


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.