맞춤 게시물 유형 및 분류법에 대한 워드 프레스 다시 쓰기 규칙


9

나는이 장소가 내가 겪고있는 문제에 대해 많은 인터넷 검색을 통해 과거에 좋은 정보원이라는 것을 알았습니다. 내 질문은 WordPress에서 사용하는 자세한 다시 쓰기 규칙과 관련이 있습니다.

project 라는 사용자 지정 게시물 유형을 설정했으며 projects 라는 사용자 지정 분류법을 등록했습니다 . 다시 쓰기 규칙으로 인해 충돌이 발생하는 다시 쓰기 슬러그 옵션을 제외하고 모든 것이 잘 작동합니다.

기본적으로 이것은 내가 달성하고자하는 구조입니다.

  • example.com/work/%taxonomy%/%post_name%/ (게시물)
  • example.com/work/%taxonomy%/ (특정 분류 용어에 속하는 게시물 목록)
  • example.com/work/ (taxonomy.php가 포함 된 page-work.php로 이동하여 해당 분류와 관련된 모든 게시물을 나열합니다)

여기 내가 지금까지 가지고있는 코드가 있지만 WP_Rewrite 규칙을 작성하는 데 도움이 필요합니다.

$labels = array(
    'name' => _x('Projects', 'post type general name'),
    'singular_name' => _x('Project', 'post type singular name'),
    'add_new' => _x('Add New', 'project item'),
    'add_new_item' => __('Add New Project'),
    'edit_item' => __('Edit Project'),
    'new_item' => __('New Project'),
    'view_item' => __('View Project'),
    'search_items' => __('Search Projects'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => ''
);

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'hierarchical' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false),
    'show_ui' => true,
    '_builtin' => false, // It's a custom post type, not built in!
    'capability_type' => 'post',
    'query_var' => "project", // This goes to the WP_Query schema
    'menu_position' => null,
    'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);

register_post_type('project' , $args);

// Showcase Taxonomy
register_taxonomy('projects', array('project'), array(
    'public' => true,
    'hierarchical' => true,
    'label' => 'Project Categories', 
    'singular_label' => 'Project Category',
    'query_var' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false, 'hierarchical'=>true)
    )
);

도와 주셔서 감사합니다! :-)



@ChristopherDavis 감사합니다. 조금 더 자세히 살펴보고 어떻게 진행되는지 보겠습니다.
matt_d_rat 2016 년

1
이 질문은 커스텀 포스트 유형과 분류 재 작성 구조혼합 하여 볼 수 있다고 생각 합니까? 해당 질문이 도움이되지 않으면이 질문을 편집하여 다른 점을 나타내십시오.
Jan Fabry

답변:


1

이것이 문제를 해결할 수 있기를 바랍니다.

function my_custom_post_type() {
$labels = array(
    'name' => _x('Projects', 'post type general name'),
    'singular_name' => _x('Project', 'post type singular name'),
    'add_new' => _x('Add New', 'project item'),
    'add_new_item' => __('Add New Project'),
    'edit_item' => __('Edit Project'),
    'new_item' => __('New Project'),
    'view_item' => __('View Project'),
    'search_items' => __('Search Projects'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => '',
    'menu_name' => 'Projects' 
);

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
        'hierarchical' => false,
        'has_archive' => true,
    'rewrite' => array('slug'=>'work', 'with_front'=>false),
    'show_ui' => true,
    '_builtin' => false, // It's a custom post type, not built in!
    'capability_type' => 'post',
        'query_var' => true, // This goes to the WP_Query schema
    'menu_position' => null,
    'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
);

register_post_type( 'work' , $args );

}
function my_custom_taxonomies() {

    $labels = array(
        'name' => __( 'Taxonomy', 'taxonomy general name' ),
        'singular_name' => __( 'Taxonomy', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Taxonomy' ),
        'all_items' => __( 'All Taxonomy' ),
        'parent_item' => __( 'Parent Taxonomy' ),
        'parent_item_colon' => __( 'Parent Taxonomy:' ),
        'edit_item' => __( 'Edit Taxonomy' ), 
        'update_item' => __( 'Update Taxonomy' ),
        'add_new_item' => __( 'Add New Taxonomy' ),
        'new_item_name' => __( 'New Taxonomy Name' ),
        'menu_name' => __( 'Taxonomy' ),
    );  

    register_taxonomy( 'taxonomy', array('work'), array (
                    'labels' => $labels,
                    'hierarchical' =>false,
                    'show_ui' => true,
                    'rewrite' => array( 'slug' => 'work/taxonomy'),
                    'query_var' => true,
                    'show_in_nav_menus' => true,
                    'public' => true,
            ));
}

add_action('init', 'my_custom_post_type', 0);
add_action('init', 'my_custom_taxonomies', 10);

작성해야 할 것은 사용자 정의 분류 아카이브를 표시하는 데 사용할 archive-work.php (포스트 유형 아카이브) 및 taxonomy.php입니다.


자신의 분류 이름으로 "taxonomy"를 변경하는 것을 잊지 마십시오. post_type과 같은 값을 사용하지 마십시오. 첫 번째 시도에 카테고리를 사용하십시오. work / category, register_taxonomy ( 'category, array ('work '), array (......
nonsensecreativity

1

나는 같은 문제가 있었고 많은 어려움을 겪은 후에이 솔루션으로 끝났습니다.
이것을 코드에 추가하십시오.

global $wp_rewrite;
$wp_rewrite->flush_rules(); 

function my_custom_post_type() {
    $labels = array(
        'name' => _x('Projects', 'post type general name'),
        'singular_name' => _x('Project', 'post type singular name'),
        'add_new' => _x('Add New', 'project item'),
        'add_new_item' => __('Add New Project'),
        'edit_item' => __('Edit Project'),
        'new_item' => __('New Project'),
        'view_item' => __('View Project'),
        'search_items' => __('Search Projects'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => '',
        'menu_name' => 'Projects' 
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
            'hierarchical' => false,
            'has_archive' => true,
        'rewrite' => array('slug'=>'work', 'with_front'=>false),
        'show_ui' => true,
        '_builtin' => false, // It's a custom post type, not built in!
        'capability_type' => 'post',
            'query_var' => true, // This goes to the WP_Query schema
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail', 'comments', 'author', 'excerpt')
    );

    register_post_type( 'work' , $args );

    global $wp_rewrite;   
    $wp_rewrite->flush_rules();    // this should help 
}

5
$ wp_rewrite-> flush_rules ()를 자주 실행하지 말고 활성화 또는 비활성화 훅에서만 또는 가능한 한 적게 실행해야합니다. 너무 여기에 말한다 : codex.wordpress.org/Rewrite_API/flush_rules이 ALSO 거의 이것과 동일한 기능입니다 : codex.wordpress.org/Function_Reference/flush_rewrite_rules
자레드

또 다른 참고로, 이것이 내가 달성 한 방법입니다. pastebin.com/k7QvxKLi
Jared

@Jared 지적 해 주셔서 감사하지만, 이것이 테마에 통합 될 때 (예를 들어 플러그인을 통해) 이것을 동반하는 방법을 알 수 없었습니다. 제안 해주세요.
Dipesh KC

이 경우 코드가 입력 functions.php됩니다. 플러그인과 테마에 대한 코드는 정확히 동일합니다. 유일한 차이점은 항상 functions.php포함되는 테마 또는 포함 된 파일에 있습니다.functions.php
Jared

2
after_switch_theme후크를 사용하는 것이 좋습니다 . 3.3 (IIRC)의 새로운 기능입니다.
Cristian

0

더 자세한 설명은 다른 게시물 에 있지만 추가해야 할 기본 부분은 다음과 같습니다.

  1. 분류법과 cpt를 등록하십시오. 분류에 대한 재 작성 슬러그가 "basename"이고 cpt에 대한 재 작성 슬러그가 "basename / % tax_name %"인지 확인하십시오.

  2. 다음과 같이 "% tax_name %"로 무엇을할지 워드 프레스에게 알려주십시오.

    function filter_post_type_link($link, $post)
    {
    if ($post->post_type != 'custom_post_type_name')
        return $link;
    
    if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
    {
        $link = str_replace('%taxonomy_name%',array_pop($cats)->term_id, link); // see custom function defined below
    }
    return $link;
    }
    add_filter('post_type_link', 'filter_post_type_link', 10, 2);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.