code

WordPress의 사용자 지정 게시물 유형에 대한 영구 링크에 특정 범주만 표시

starcafe 2023. 6. 7. 23:03
반응형

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

반응형