플러그인을 수정하지 않고 플러그인의 기존 사용자 정의 게시물 유형의 슬러그를 다시 선언 / 변경할 수 있습니까?
즉, 플러그인 X가 슬러그 / uncookedtoast /를 사용하여 사용자 정의 게시물 유형을 만드는 경우 슬러그를 / bread /로 변경하는 functions.php (또는 이와 유사한 것)에 필터를 추가 할 수 있습니까?
플러그인을 수정하지 않고 플러그인의 기존 사용자 정의 게시물 유형의 슬러그를 다시 선언 / 변경할 수 있습니까?
즉, 플러그인 X가 슬러그 / uncookedtoast /를 사용하여 사용자 정의 게시물 유형을 만드는 경우 슬러그를 / bread /로 변경하는 functions.php (또는 이와 유사한 것)에 필터를 추가 할 수 있습니까?
답변:
예, 가능하지만 플러그인이 rewrite => array('slug' => 'post_type')
매개 변수를 사용하여 사용자 정의 게시물 유형을 작성하는 경우 슬러그 를 교체 할 가능성이 없습니다 .
사용자 정의 게시물 유형이 작성 될 때마다 URL 재 작성 규칙이 데이터베이스에 기록됩니다. 어떤 조치가 사용자 정의 게시 유형 (예 : 초기화 조치) 작성을 트리거하는지에 따라 WordPress는 변경 시도와 상관없이 다시 쓰기 규칙을 비우고 사용자 정의 게시 유형의 슬러그를 복원합니다.
즉, 사용자 정의 포스트 유형에 대해 사용자 정의 슬러그를 제공 할 수 있습니다. 다음 예제는 사용자 정의 게시물 유형이 movies
있고 /movies/
슬러그를 (으) 로 변경하려고 시도 한다고 가정합니다 /films/
.
다음은 movies
맞춤 게시물 유형 을 정의하는 데 사용되는 기본 기능 입니다. 당신이 참조하는 플러그인은 다음과 같이해야합니다 :
function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
기존 게시물 유형에 따라 고유 한 사용자 지정 규칙을 제공하여 옵션 테이블을 수정할 수 있습니다.
기본적으로이 작업을 수행합니다.
이를 수행하는 방법은 다음과 같습니다.
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option('rewrite_rules')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces 'movies' with 'films' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, 'movies') !== false) {
add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');
이제 두 가지 방법으로 영화에 액세스 할 수 있습니다.
/movies/Back-To-The-Future
/films/Back-To-The-Future
액션이 너무 자주 발생 add_custom_rewrite_rule
하므로 init
액션에 연결하는 것은 권장하지 않습니다 . 이것은 단지 예일뿐입니다. 이 기능을 적용하기에 더 좋은 곳은 테마 활성화, 플러그인 활성화, 아마도 save_post 액션 등에 있습니다. 수행해야 할 작업에 따라 한 번 또는 몇 번만 실행하면됩니다.
이 시점에서 ' /movies/
슬러그 를 사용하도록 맞춤 게시물 유형에 대한 퍼머 링크를 업데이트하는 것이 좋습니다 . 예를 들어로 이동하면 /films/
모든 영화 목록이 표시되지만 제목 위로 마우스를 가져 가면 /movies/
슬러그가 여전히 사용되고 있음을 알 수 있습니다.
한 걸음 더 나아 가기 위해 기술적으로 301 리디렉션을 기술하여 모든 링크를 해당 링크 /movies/
로 리디렉션하여 해당 링크 로 리디렉션 할 수 /films/
있지만 이는 모두 시도하려는 작업에 따라 다릅니다.
$post
에서 사용할 수 있어야 add_custom_rewrite_rule()
하지만 WP 관리자에서 '비 객체의 속성을 가져 오려고합니다'라는 오류가 발생합니다. 메타 가치를 얻기 위해 $ post를 어떻게 얻을 수 있습니까?
이 코드는 내 자식 테마에 잘 작동했습니다. "프로그램"슬러그를 "장소"로 변경해야합니다.
/*
CHANGE SLUGS OF CUSTOM POST TYPES
*/
function change_post_types_slug( $args, $post_type ) {
/*item post type slug*/
if ( 'program' === $post_type ) {
$args['rewrite']['slug'] = 'place';
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );
/*
CHANGE SLUGS OF TAXONOMIES, slugs used for archive pages
*/
function change_taxonomies_slug( $args, $taxonomy ) {
/*item category*/
if ( 'program-category' === $taxonomy ) {
$args['rewrite']['slug'] = 'locations';
}
return $args;
}
add_filter( 'register_taxonomy_args', 'change_taxonomies_slug', 10, 2 );
$args['has_archive'] = false
했고 이것이 효과가있었습니다.