맞춤 게시물 유형 이름과 페이지 퍼머 링크 충돌 해결 (동일한 슬러그)


19

"visningshus"라는 사용자 정의 게시물 유형과 해당 슬러그가있는 페이지가 있습니다. 이것은 (필수)해야합니다.

현재 " http://my-site.com/visningshus "는 해당 유형의 모든 게시물을 나열합니다. 해당 영구 링크 슬러그가있는 페이지를 대신 표시하고 싶습니다.

Wordpress가 게시물 유형 이름을 우선하지 않고 영구 링크를 만들고 페이지를 표시하도록하려면 어떻게해야합니까?

답변:


33

가장 쉬운 방법은이 CPT에 대한 보관 페이지를 비활성화하는 것입니다.

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

"설정> 영구 링크" 에서 나중에 영구 링크를 새로 고치는 것을 잊지 마십시오.


1
완벽하게 작동했지만 이제 사용자 정의 게시물 유형의 이름으로 시작하는 모든 영구 링크는 wp-admin에서 정확하고 다시 쓰기가 수행되지 않는 것처럼 보이지만 404를 제공합니다. 즉, 모든 퍼머 링크는 사이트에서 정확하지만 모든 사용자 정의 게시물은 404를 제공합니다. 도와 드릴까요? :)
Henrik Erlandsson

@HenrikErlandsson 게시물 유형이 페이지 이름과 동일 할 수 있습니다. 이 경우 게시물 유형 이름을 변경하는 것이 좋습니다. 예 : 맞춤 게시물 유형 이름-이전 : 제품 이후 : cpt_products
Bruno Monteiro

매우 지능적입니다. 많은 문제 해결
bysanchy

8

나는 @Carl의 게시물에 대해 언급 할만 큼 평판이 좋지 않지만 그의 대답은 (적어도 페이지 슬러그사용자 정의 게시물 유형 슬러그 를 동일 하게 유지하고 archive.php 파일을 사용하지 않는 상황)

그러나 그의 대답은 페이지 매김에 오류를 줄 것입니다. 페이지 매김 오류를 피하려면

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

페이지 매김을보고 페이지 번호를 가져온 다음 반대쪽에서 일치하는 슬러그가있는 페이지를 사용하도록 한 다음 페이지 변수를 삽입합니다.

이것은 추가'has_archive' => false,위의 게시 원하는 기능을 수행한다.

다른 사람들이 언급 했듯이이 변경을 한 후에 설정> 영구 링크를 방문하여 다시 쓰기 규칙을 플러시하십시오.

나는 이것이 정말 오랫동안 나를 혼란스럽게했기 때문에 이것이 누군가를 돕기를 바랍니다.


4

Tjena Henrik!

이미 작성한 Wordpress Rewrite 규칙에 다시 쓰기 규칙을 추가하기 만하면됩니다. 이 코드 스 니펫을 테마의 functions.php에 추가하거나 별도의 pugin으로 포함하십시오 ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
누구든지 이것을 사용하면 제거하십시오 . 매번 flush_rewrite_rules();다시 쓰기 규칙을 변경해서는 안됩니다 init. 한 번 다시로드 한 다음 제거하거나 관리 대시 보드의 퍼머 링크 설정으로 이동하여 "변경 사항 저장"을 클릭하여 퍼머 링크를 수동으로 플러시
tehlivi

0

갈등을 해결하지 않고 해결했습니다. 슬러그 visningshus와 함께 페이지를 만들고 원하는 것을 쓰십시오. 이 페이지의 ID를 기록해 두십시오.

원하는 방식으로 archive-custom-post-type.php 템플릿을 만들고 사용자 지정하지만 (페이지 템플릿을 사용하는 경우가 많음) 루프 부분을

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

그런 다음 http://my-site.com/visningshus 로 이동 하면 페이지에서 올바른 URL로 관리되는 콘텐츠가 표시됩니다.

작동하는지 알려주세요.


좋은 생각이지만 이것은 너무 복잡합니다. 내 해결책을 시도 했습니까?
kraftner

@ kraftner 아니, 나는하지 않았다. 다음에 시도해 볼게요. 감사!
molokom 2014

또한 헤더와 같은 부작용이 있으며 페이지가 아닌 아카이브 페이지 인 것처럼 여전히 생성되는 모든 것이 있습니다. 그 솔루션을 사용하는 것에 대해서는 조언하지 않을 것입니다.
kraftner

페이지 ID가 변경되면 어떻게됩니까? 안전하지 않습니다.
Joel James

0

투표가 허용되지 않지만 Carls 솔루션의 경우 +, register_post_type은

'has_archive' => false

단순한. 그러나 페이지 매김 문제가 발생하면

add_rewrite_rule

0

나를 위해 고쳐진 것은 아카이브를 false로 설정했지만 사용자 정의 게시물 유형을 설정할 때 계층을 false로 설정하는 것입니다!


0

다음은 모든 사용자 정의 게시물 유형 슬러그에 대한 사용자 정의 게시물 유형 콘텐츠보다 페이지 매김의 우선 순위를 지정하는 일반적인 솔루션입니다.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

이 스 니펫을 추가하는 것 외에도 맞춤 게시물 유형이 archive = false

마지막으로 Permalinks 설정 페이지 설정> Permalinks (/wp/wp-admin/options-permalink.php) 로 이동하여 현재 설정을 저장하여 페이지의 링크 구조를 새로 고칩니다.

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