커스텀 포스트 타입 퍼멀링크에 커스텀 분류법을 추가하는 방법
다음 사용자 지정 분류법을 가지고 있습니다.campaign
라고 하는 커스텀 투고 타입을 지정합니다.asset
자산은 다음과 같은 permalink 구조를 원합니다.mysite.com/<campaign_name>/<asset_name>
아래 코드로 이 작업을 수행했지만, 이제 URL 구조의 일반 페이지로 이동하면mysite.com/<pagename>
404점이에요.그리고 커스텀 포스트 타입을 등록하기 위한 함수의 rewrite slug 부분을 코멘트 할 때, 또는 이것을 대신 추가할 때ams/%campaign%
동작합니다만, 커스텀 투고 타입에 필요한 URL 구조가 아닙니다.
사용자 지정 분류법을 등록하기 위한 코드:
...
'rewrite' => array(
'slug' => '',
'with_front' => true,
),
...
커스텀 투고 타입을 등록하기 위한 코드:
...
rewrite' => array(
'slug' => '%campaign%',
'with_front' => true,
),
...
개서 규칙 함수:
function ams_asset_add_rewrite_rules( $rules ) {
global $post;
if ($post->post_type == 'asset' ) {
$new = array();
$new['([^/]+)/(.+)/?$'] = 'index.php?asset=$matches[2]';
$new['(.+)/?$'] = 'index.php?campaign=$matches[1]';
return array_merge( $new, $rules );
}
return $rules;
}
add_filter( 'rewrite_rules_array', 'ams_asset_add_rewrite_rules' );
// Handle the '%campaign%' URL placeholder
function ams_asset_filter_post_type_link( $link, $post = 0 ) {
if ( $post->post_type == 'asset' ) {
$cats = wp_get_object_terms( $post->ID, 'campaign' );
if ( $cats ) {
$link = str_replace( '%campaign%', $cats[0]->slug, $link );
}
}
return $link;
}
add_filter( 'post_type_link', 'ams_asset_filter_post_type_link', 10, 2 );
먼저 분류법을 등록하고 개서의 slug 인수를 shows로 설정합니다.
register_taxonomy(
'campaign',
'asset',
array(
'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
// your other args...
)
);
다음으로 투고 유형을 등록하고 slug를 shows/%show_category%로 설정하고 has_archive 인수를 shows로 설정합니다.
register_post_type(
'show',
array(
'rewrite' => array( 'slug' => 'campaign/%asset%', 'with_front' => false ),
'has_archive' => 'asset',
// your other args...
)
);
마지막으로 post_type_link에 필터를 추가하여 개별 show permalinks의 show 카테고리를 대체합니다.
function wpa_show_permalinks( $post_link, $post ){
if ( is_object( $post ) && $post->post_type == 'asset' ){
$terms = wp_get_object_terms( $post->ID, 'campaign' );
if( $terms ){
return str_replace( '%campaign%' , $terms[0]->slug , $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );
먼저 분류법을 등록한 후 커스텀 투고 유형을 등록합니다.당신은 또한 당신의 과민반응을 보호해야 할 수도 있다.'with_front'를 true로 설정하고 싶지 않은 것 같습니다.나머지는 괜찮을지 모르지만, 여기 작동 예가 있습니다.
/**
* Register a 'campaign' taxonomy for post type 'asset'.
*
* @see register_post_type for registering post types.
*/
function wpdocs_create_campaign_tax_rewrite() {
register_taxonomy( 'campaign', 'asset', array(
'rewrite' => array(
'slug' => '',
'with_front' => false,
),
) );
}
add_action( 'init', 'wpdocs_create_campaign_tax_rewrite', 0 );
/**
* Implements init_hook to register post type.
* https://codex.wordpress.org/Function_Reference/register_post_type
*/
function generic_create_posttype_asset() {
register_post_type(
'asset',
array(
'labels' => array(
'name' => __( 'Assets' ),
'singular_name' => __( 'Assets' ),
'add_new' => __( 'New Asset' ),
'add_new_item' => __( 'New Asset' ),
'edit_item' => __( 'Edit Asset' ),
),
'description' => 'Campaign ...',
'public' => true,
'hierarchical' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => '%campaign%',
'with_front' => false,
),
'show_in_menu' => true,
'menu_icon' => 'dashicons-category', // https://developer.wordpress.org/resource/dashicons/ .
'supports' => array( 'title', 'editor', 'revisions', 'thumbnail' ),
)
);
}
add_action( 'init', 'generic_create_posttype_asset' );
/**
* Rewrite '%campaign%' with taxonomy assigned.
*/
function asset_show_permalinks( $post_link, $post ){
if ( is_object( $post ) && $post->post_type == 'asset' ){
$terms = wp_get_object_terms( $post->ID, 'campaign' );
if( $terms ){
return str_replace( '%campaign%' , $terms[0]->slug , $post_link );
}
} else {
return $post_link;
}
}
add_filter( 'post_type_link', 'asset_show_permalinks', 1, 2 );
function generic_cpt_rewrite_flush() {
generic_create_posttype_asset();
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'generic_cpt_rewrite_flush' );
언급URL : https://stackoverflow.com/questions/57765487/how-to-add-custom-taxonomy-in-custom-post-type-permalink
'programing' 카테고리의 다른 글
휴지 상태 및 스프링 부트에서 배치 삽입을 활성화하는 방법 (0) | 2023.04.04 |
---|---|
값을 구문 분석하는 동안 예기치 않은 문자가 발견되었습니다. (0) | 2023.04.04 |
ReactJ의 라디오 버튼을 사용하는 방법 (0) | 2023.04.04 |
Bootstrap-ui 모달과 함께 ui 라우터 사용 (0) | 2023.04.04 |
임시 업로드 위치 [/tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT]가 잘못되었습니다. (0) | 2023.04.04 |