programing

커스텀 포스트 타입의 「전면」슬래그와 같은 타이틀의 WordPress 페이지가 있다.

megabox 2023. 2. 23. 22:42
반응형

커스텀 포스트 타입의 「전면」슬래그와 같은 타이틀의 WordPress 페이지가 있다.

커스텀 투고 타입이 있습니다.djs및 커스텀 분류법city다음 두 가지 용어가 있습니다.boston그리고.nyc그래서 DJ는 보스턴이나 뉴욕이라는 꼬리표를 붙일 수 있어요.

DJ 프로파일 (싱글)djspost)는 다음 위치에 있습니다./nyc-wedding-dj/joe-shmoe/예를 들어, 보스턴 DJ의 경우,/boston-wedding-dj/jane-doe/즉, 그 커스텀 포스트 타입의 개서 슬러그는 다음과 같이 설정됩니다.%city%-wedding-dj.

두 개의 정규 페이지가 있는데/boston-wedding-djs/그리고./nyc-wedding-djs/('가 있는 여러 DJ에 주의) 커스텀 페이지 템플릿을 사용하여 해당 도시의 DJ를 루프하고 해당 페이지의 도시에서 DJ 프로파일에 대한 링크 목록을 표시합니다.

내가 하고 싶은 것은 개서 슬러그가%city%-wedding-djs따라서 커스텀 투고 타입의 단일 페이지는 위에서 언급한 페이지의 하위 페이지로 "구글"됩니다.

단, 커스텀 포스트 타입의 리라이트 슬러그를 변경할 때 충돌이 있습니다.djs로.%city%-wedding-djs페이지에 대해 "404 Not Found" (404 Not Found (찾을 수 없음)/boston-wedding-djs/그리고./nyc-wedding-djs/.

페이지와 같은 이름의 리라이트 슬러그는 어떻게 가질 수 있나요?

이것은 나에게 다소 관련이 있는 주제에 대한 매튜 보인즈의 훌륭한 블로그 투고를 생각나게 했다.

당신이 설명한 충돌을 피하기 위해 독특한 베이스 슬러그를 사용하는 것이 좋습니다.

WordPress 내에서 이 작업을 수행해야 하는 경우 - 또는 필터를 사용하여 수신 요청을 구문 분석하는 방법을 조정할 수 있습니다.

:

이것은, 다음의 경우에 체크됩니다.%city%-wedding-djs페이지가 존재하므로 나중에 도시를 추가할 경우 코드 스니펫을 업데이트할 필요가 없습니다.

! is_admin() && add_filter( 'request', function( $query_vars )  
{
    if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) )  
    {
        $slug = $query_vars['city'] . '-wedding-djs';

        // Override if the %city%-wedding-djs page exists
        if ( get_page_by_path( $slug ) )
            $query_vars['pagename'] = $slug;
    }
    return $query_vars;
} );

또는 당신이 단지boston그리고.nyc해당 페이지가 존재하는지 확인할 필요가 없습니다.

! is_admin() && add_filter( 'request', function( $query_vars )  
{
    if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) )  
    {
        $city = $query_vars['city'];
        if ( in_array( $city, array( 'boston', 'nyc' ) ) )
            $query_vars['pagename'] = $city . '-wedding-djs';
    }
    return $query_vars;
} );

즉, 요구는 다음과 같습니다.

example.tld/nyc-wedding-djs/

현재 로서 취급되고 있다.page,그리고.

example.tld/nyc-wedding-djs/joe-smhoe/

로서djs포스트.

여기에서는, 다음과 같이 가정합니다.page재작성 규칙의 priority는 다음보다 낮습니다.djs포스트 타입

htaccess 를 사용하고 있는 경우는, 이러한 페이지의 리다이렉트를 수동으로 설정할 수 있습니다.이러한 리다이렉트는 올바르게 해결됩니다.다음 행을 추가합니다.

RewriteCond %{REQUEST_URI} ^/boston-wedding-djs/$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/boston-wedding-djs$ [NC]
RewriteRule . index\.php?pagename=boston-wedding-djs [NC,L]
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs/$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs$ [NC]
RewriteRule . index\.php?pagename=nyc-wedding-djs [NC,L]

끝나고RewriteRule ^index\.php$ - [L]

WordPress add_rewrite_rule을 사용하여 이 작업을 수행할 수도 있지만 이미 혼란을 겪고 있는 것 같기 때문에 동작 가능성은 낮아 보입니다.

같은 슬러그로 포스트와 페이지를 가질 수 없습니다.

.archive-djs.php '어쩌면'은single-djs.php그러면 해당 페이지가 동적으로 표시됩니다.

템플릿 계층에 대해서는 이 페이지를 참조하십시오.

언급URL : https://stackoverflow.com/questions/31621722/have-a-wordpress-page-with-same-title-as-custom-post-type-front-slug

반응형