반응형
WordPress의 사용자 지정 게시물 유형에 대한 영구 링크에 특정 범주만 표시
Wordpress Development 네트워크에서 이 질문을 하려고 했지만 성공하지 못했습니다. 커스텀 포스트 유형 카테고리에 대한 퍼멀 링크에 특정 카테고리 3개만 표시하려고 합니다.
현재 permalinks 구조(이것은 내가 사용하고 있는 테마에 의해 주어진 구조이며 하위 테마를 통해 수정하는 구조)는 다음과 같습니다.
www.myfoodblog.com/recipes/the-post-title/
^ ^ ^
root custom-post-type title
어떤 게시물은 내가 파마 링크에 표시하고 싶은 3개의 카테고리 아래에 있습니다.restaurant
,users
그리고.admin
이와 같은 것을 얻는 것.
www.myfoodblog.com/recipes/restaurant/the-post-title/
www.myfoodblog.com/recipes/users/the-post-title/
www.myfoodblog.com/recipes/admin/the-post-title/
해당 범주에 속하지 않는 게시물에 대해 원래 구조를 유지합니다.
이 플러그인을 사용해 봤는데 모든 게시물에 대한 사용자 지정 게시물 유형 범주가 표시됩니다.
또한 이 질문에서 제공된 지침을 따르려고 했지만 작동하지 않고 영구 링크 구조가 변경되지 않습니다.
어떤 조언이든 대단히 감사합니다.
둘 다 작업해야 합니다.post_type_link
그리고 a를 추가rewrite rule
function recipes_post_link( $post_link, $id = 0 ){
$post = get_post( $id );
if ( is_object( $post ) ){
$terms = get_the_terms( $post->ID, 'recipe-category' );
foreach($terms as $term) {
if( $term->slug == 'restaurants' || $term->slug == 'users'){
return str_replace( site_url()."/recipes" , site_url()."/recipes/".$term->slug , $post_link );
}
}
}
return $post_link;
}
add_filter( 'post_type_link', 'recipes_post_link', 1, 3 );
function custom_rewrite_basic() {
add_rewrite_rule('^recipes/(.+)/(.+)', 'index.php?recipe=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_basic');
게시물 유형 만들기
add_action( 'init', 'codex_recipes_init' );
/**
* Register a recipes post type.
*
* @link http://codex.wordpress.org/Function_Reference/register_post_type
*/
function codex_recipes_init() {
$labels = array(
'name' => _x( 'Recipes', 'post type general name', 'your-plugin-textdomain' ),
'singular_name' => _x( 'Recipe', 'post type singular name', 'your-plugin-textdomain' ),
'menu_name' => _x( 'Recipes', 'admin menu', 'your-plugin-textdomain' ),
'name_admin_bar' => _x( 'Recipe', 'add new on admin bar', 'your-plugin-textdomain' ),
'add_new' => _x( 'Add New', 'recipe', 'your-plugin-textdomain' ),
'add_new_item' => __( 'Add New Recipe', 'your-plugin-textdomain' ),
'new_item' => __( 'New Recipe', 'your-plugin-textdomain' ),
'edit_item' => __( 'Edit Recipe', 'your-plugin-textdomain' ),
'view_item' => __( 'View Recipe', 'your-plugin-textdomain' ),
'all_items' => __( 'All Recipes', 'your-plugin-textdomain' ),
'search_items' => __( 'Search Recipes', 'your-plugin-textdomain' ),
'parent_item_colon' => __( 'Parent Recipes:', 'your-plugin-textdomain' ),
'not_found' => __( 'No recipes found.', 'your-plugin-textdomain' ),
'not_found_in_trash' => __( 'No recipes found in Trash.', 'your-plugin-textdomain' )
);
$args = array(
'labels' => $labels,
'description' => __( 'Description.', 'your-plugin-textdomain' ),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'recipes/%type%' ),
'capability_type' => 'post',
'has_archive' => 'recipes',
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'recipes', $args );
}
중요: 다시 쓰기 규칙 확인:'rewrite'=> array( 'slug' => 'recipes/%type%' ),
사용자 지정 분류법 만들기
// hook into the init action and call create_recipes_taxonomies when it fires
add_action( 'init', 'create_recipes_taxonomies', 0 );
function create_recipes_taxonomies() {
// Add new taxonomy, NOT hierarchical (like tags)
$labels = array(
'name' => _x( 'Type', 'taxonomy general name', 'textdomain' ),
'singular_name' => _x( 'Type', 'taxonomy singular name', 'textdomain' ),
'search_items' => __( 'Search Types', 'textdomain' ),
'popular_items' => __( 'Popular Types', 'textdomain' ),
'all_items' => __( 'All Types', 'textdomain' ),
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => __( 'Edit Type', 'textdomain' ),
'update_item' => __( 'Update Type', 'textdomain' ),
'add_new_item' => __( 'Add New Type', 'textdomain' ),
'new_item_name' => __( 'New Type Name', 'textdomain' ),
'separate_items_with_commas' => __( 'Separate types with commas', 'textdomain' ),
'add_or_remove_items' => __( 'Add or remove types', 'textdomain' ),
'choose_from_most_used' => __( 'Choose from the most used types', 'textdomain' ),
'not_found' => __( 'No types found.', 'textdomain' ),
'menu_name' => __( 'Types', 'textdomain' ),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'update_count_callback' => '_update_post_term_count',
'query_var' => true,
'rewrite' => array( 'slug' => 'type' ),
);
register_taxonomy( 'type', 'recipes', $args );
}
필터 게시 유형 링크 추가
function recipes_post_link( $post_link, $id = 0 ){
$post = get_post( $id );
if ( is_object( $post ) ){
$terms = wp_get_object_terms( $post->ID, 'type' );
if( $terms ){
return str_replace( '%type%' , $terms[0]->slug , $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'recipes_post_link', 1, 3 );
중요: 결국 퍼멀링크 옵션으로 이동하여 재설정합니다.
언급URL : https://stackoverflow.com/questions/41494883/show-only-specific-categories-in-permalinks-for-custom-post-type-in-wordpress
반응형
'code' 카테고리의 다른 글
Firebase 단순 사용자 이름 및 암호 인증을 사용하는 경우 사용자 목록을 반환하려면 어떻게 합니까? (0) | 2023.06.12 |
---|---|
암호로 보호된 Excel 파일에서 Panda DataFrame까지 (0) | 2023.06.07 |
C/Unix에 대한 인수 구문 분석 도우미 (0) | 2023.06.07 |
유니언 유형을 유형 스크립트에서 열거형으로 변환하는 방법은 무엇입니까? (0) | 2023.06.07 |
유형 스크립트에서 최소/최대 길이의 문자열 유형 선언 (0) | 2023.06.07 |