커스텀 분류 및 페이지 재 작성 슬러그 충돌로 404 제공


9

맞춤 게시물 유형 UI 플러그인을 사용하여 맞춤 분류를 작성하고 있습니다. 나는 기술과 고객의 두 가지 맞춤형 분류로 프로젝트 (맞춤형 포스트 유형)로 구성된 포트폴리오를 가지고 있습니다. 클라이언트 분류 체계는의 사용자 정의 다시 쓰기 슬러그를 가지고 portfolio/clients/, 기술 분류 체계는의 사용자 정의 다시 쓰기 슬러그를 갖습니다.portfolio/

다시 작성 :
portfolio/html <-페이지는 HTML을 사용하는 모든 프로젝트를 표시합니다.
portfolio/clients/client-a<-페이지는 클라이언트 A의 모든 프로젝트를 표시합니다.

이제 URL 슬러그가있는 고객을위한 방문 페이지를 만들 /portfolio/clients려고하면 404 페이지가 나타납니다. 기술 분류 체계의 URL 재 작성이 충돌하기 때문에 이것이 확실합니다. 기술 분류 체계에서 검색 할 때 존재하지 않으며 404 페이지를 뱉어냅니다. 그렇다면 URL 재 작성 슬러그가 어떻게 작동하여을 칠 때 /portfolio/clients404 페이지를 다시 보내지 않고 올바른 페이지 템플릿을 사용합니까?

답변:


16

"부분 상세 재 작성 규칙"이 필요한 것 같습니다. 상세 재 작성 규칙은 WordPress가 페이지와 게시물의 차이점을 파악할 수 없기 때문에 모든 페이지가 맨 위에 배치됨을 의미합니다. 양식의 모든 URL 은이 URL을 제외하고 분류 portfolio/([^/]+)/에서 제공 되므로 여기에서 가능하다고 생각합니다 . 이 규칙을 다시 쓰기 규칙 위에 두어야하므로보다 일반적인 포트폴리오 분류법보다 먼저 일치합니다. 모든 다시 쓰기 규칙을 자세하게 표시 할 수도 있지만 페이지가 많은 경우 성능에 영향을줍니다.portfolioportfolio/clients/

이 답변은 재 작성 규칙에 대한 방금 이해 한 내용으로 작성 되었으므로이 방법을 사용하는 것이 좋으며 예제 코드에 오류가 너무 많지 않기를 바랍니다.

페이지는 하나의 다시 쓰기 규칙 만 생성하지 않고 그룹을 생성합니다.

  • (pagename)/trackback/?$
  • (pagename)/feed/(feed|rdf|rss|rss2|atom)/?$
  • (pagename)/(feed|rdf|rss|rss2|atom)/?$
  • (pagename)/page/?([0-9]{1,})/?$
  • (pagename)/comment-page-([0-9]{1,})/?$
  • (pagename)(/[0-9]+)?/?$

직접 만들 필요는 없습니다 WP_Rewrite. 의 힘을 다시 사용할 수 있습니다 . page_rewrite_rules()방법을 살펴보십시오 . 상세 모드 인 경우 모든 페이지 (를 통해 page_uri_index()) 및 첨부 파일 목록을 가져 와서 %pagename%다시 쓰기 태그를 덮어 쓰고이 페이지에 대한 다시 쓰기 규칙을 생성합니다. 우리도 이것을 할 수 있습니다 :

// We only generate them for this page
$page_uri = 'portfolio/clients';
// Returns site root + '%pagename%'
$page_structure = $wp_rewrite->get_page_permastruct();
// Everywhere you see %pagename% in the structure used to generate rules
// in the next step, replace it with our fixed page name
$wp_rewrite->add_rewrite_tag('%pagename%', "({$page_uri})", 'pagename=');
// This generates the group given above
$page_rewrite_rules = $wp_rewrite->generate_rewrite_rules($page_structure, EP_PAGES);

이렇게하면 페이지에 대한 규칙이 제공되지만 아직 페이지에 사용 된 첨부 파일에는 적용되지 않습니다. 원하는 경우 첨부 파일마다 단계를 반복하되 다음을 사용 add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')하십시오 ( page_rewrite_rules()자세한 내용은 참조).

좋습니다. 규칙이 생겼지 만 이제는 완전한 재 작성 구조에 규칙을 추가해야합니다. 이 작업을 수행 할 수 add_rewrite_rule()있지만 $page_rewrite_rules배열 에서 생성 된 모든 규칙에 대해 호출해야합니다 . 이런 이유로, 많은 사람들 rewrite_rules_array필터에 연결 합니다. 배열을 수정하면됩니다.

add_filter('rewrite_rules_array', 'add_verbose_portfolio_clients_page');
function add_verbose_portfolio_clients_page($rewrite_rules)
{
    global $wp_rewrite;

    // The previous code snippet comes here, where we generate $page_rewrite_rules

    // Our rules have priority, they should be on top
    $rewrite_rules = array_merge($page_rewrite_rules, $rewrite_rules);

    return $rewrite_rules;
}

이 필터를 포함시킨 후에는 다시 쓰기 규칙을 비워야합니다 (한 번에 한 페이지 씩로드하는 것이 아니라 무겁기 때문에). 전화 flush_rewrite_rules()를 걸거나 "Permalinks"설정 페이지를 방문하면됩니다.


우수한! 고마워요 Jan! 이것은 효과가 있었다. 더 나은 설명을받지 못했습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.