맞춤 게시물 유형에 .html (dot HTML) 확장자 추가


10

플러그인없이.html 사용자 정의 게시물 유형에 확장 을 추가하는 방법이 있습니까?

/%postname.html퍼머 링크 설정에서 사용할 수있는 게시물

페이지의 경우 다음을 사용할 수 있습니다.

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

맞춤 게시물 유형의 경우 ???

위의 코드와 유사한 코드 .html가 사용자 정의 게시물 유형 url 을 변경하거나 추가하도록 허용 합니까?


5
어떤 이유로 .html을 추가하고 싶은지 궁금하십니까?
빈스 쁘띠

글쎄, function post-type_permalink오류가 발생합니다. 이 오류가 발생하지 않으면 디버그 설정에 문제가있는 것입니다. 또한 올바른 의도로 질문을 다시 작성하십시오. 감사.
카이저

@kaiser, 사용자 정의 게시물 유형에 동일한 퍼머 링크 설정을 사용하는 방법을 알고 싶습니다. /$postname.html게시물에 대해 설정 한 경우 맞춤 게시물 유형에 대해 동일한 것을 사용하려면 어떻게해야합니까?
user983248

내 의견에 쓴 한 줄을 읽지 않았습니까? 코드를 수정하십시오. 또한 -... 함수 이름에서 작동하지 않습니다
카이저

@kaiser 네,했지만 플래시가 아니고 손에 문제가있어서 생각하거나 말한대로 입력 할 수 없습니다
user983248

답변:


8

이것은 작동하는 것 같습니다 :

같은 다시 쓰기 규칙을 만듭니다 post-type/post-name.html. 배열을 사용하여 모든 게시물 유형에 대한 규칙 대신 일부 게시물 유형에 대한 규칙을 작성할 수 있습니다.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

이러한 게시물 유형에 대한 새 퍼머 링크 구조를 형식화하십시오.

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

그런 다음 표준 URL 리디렉션을 중지하여 후행 슬래시를 제거하십시오. 대부분의 경우 리디렉션을 유지하려는 경우 작업이 더 필요할 수 있습니다.

add_filter( 'redirect_canonical', '__return_false' );

다른 사람들이 여기에서 말했듯이 위의 작업을 수행 한 후 규칙을 플러시해야합니다 . 의 options-permalink.php관리자 페이지를 방문하면 가능합니다 Dashboard -> Settings -> Permalinks.


6
Viiius, Oi Vinicius 는 복사 / 파스타의 충돌을 피하기 위해 모든 함수 이름 앞에 wpse_59024_ (질문 ID) 를 붙이는 것 입니다.) . . 또한 코드가 코드 조각에 속하는 Answer를 아는 이점이 있습니다. . . . . +1 스팟 온!
brasofilo

이 코드는 사용하는 다른 필터를 덮어 쓰게 post_type_link필터
톰 J 노웰

4

내장 된 퍼머 링크를 대체하는 재 작성 규칙을 추가 할 수 있습니다 (예 : 사용자 정의 게시물 유형 "product").

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(퍼머 링크를 다시 저장하거나 flush_rules위의 @toscho 참고 사항을 사용하여 규칙을 플러시하는 것을 잊지 마십시오 ).

경고

  • 나는 the_permalink()이것을 사용하는 것과 같은 기능을 생각하지 않으므로 post_link링크를 잡기 위해 필터를 추가해야 할 수도 있습니다 . redirect_canonical/ product / foo 및 / product / foo /가 /product/foo.html로 리디렉션되도록 기본 영구 링크를 리디렉션 하도록 필터에 추가 할 수도 있습니다 .
  • 피드 URL, 후속 페이지, 트랙백 등과 같이 사이트에서 사용한 다른 URL에 대해 추가 재 작성을 추가해야합니다. 위 코드는 기본 사용자 정의 게시물 유형 페이지에 대해서만 작동합니다.

2

작업을 처리하기 위해 WordPress 플러그인을 선호 하려면 WordPress 플러그인 저장소에서 사용자 정의 게시물 유형 영구 링크 를 확인하십시오 . WordPress 3.4.1에서 테스트되었으며 완벽하게 작동합니다.

플러그인을 활성화 한 후 대시 보드-> 설정-> 영구 링크로 이동하십시오. 등록 된 각 사용자 정의 게시물 유형에 대해 특정 재 작성을 추가 할 수 있습니다.


3
모든 페이지로드시 다시 쓰기 규칙을 플러시하지 마십시오.
fuxia

그 코드는 단지에서 코드를 복사하여 붙여 넣으면 또한, 작동하지 않는 xplus3.net/2010/05/20/wp3-custom-post-type-permalinks 이 예상대로 -1 테스트하지 작동하는지 확인
user983248을

@toscho 어떻게 하시겠습니까?
user983248

1
flush_rules()매우 느리기 때문에 비활성화 / 활성화시에만 호출해야합니다. $GLOBALS['wp_rewrite']->rules규칙이 이미 알려져 있는지 확인할 수 있습니다 .
fuxia

@ Michael Ecklund 그것은 작동하지 않는 404를 제공합니다. 그 코드를 테스트 했습니까?
user983248
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.