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