Добавление кастомного типа записей с поддержкой кастомных категорий в wordpress

При написании сайтов на WordPress иногда не хватает стандартного функционала рубрик, и возникает необходимость добавления нового кастомного раздела(или нескольких разделов) на сайт. Рассмотрим возможность добавления собственных типов записей с отдельными шаблонами. Весь представленный код писать в файл functions.php вашей темы.

Весь код выглядит так:

function custom_cat() {
    // create a new taxonomy
    register_taxonomy(
        'timeline',
        'timeline-item',
        array(
            'label' => __( 'TL Category' ),
            'rewrite' => array( 'slug' => 'timeline', 'with_front' => false ),
            'capabilities' => array(
                'manage_terms' => 'manage_categories',
                'edit_terms' => 'manage_categories',
                'delete_terms' => 'manage_categories',
                'assign_terms' => 'edit_posts',
            ),
            'show_ui' => true,
            'show_tagcloud' => false,
            'hierarchical' => true
        )
    );
}
add_action( 'init', 'custom_cat' );

function create_post_type() {

    register_post_type( 'timeline-item',
        array(
            'labels' => array(
                'name' => __( 'Timeline item' ),
                'singular_name' => __( 'Timeline item' ),
            ),
            'rewrite' => array( 'slug' => 'timeline/%timeline%', 'with_front' => false ),
            'public' => true,
            'taxonomies'  => array( 'timeline' ),
            'hierarchical' => true,
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' )
        )
    );
    flush_rewrite_rules();
}
add_action( 'init', 'create_post_type' );

//fix sef
function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'timeline-item' ){
        $terms = wp_get_object_terms( $post->ID, 'timeline' );
        if( $terms ){
            return str_replace( '%timeline%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

Шаблоны таксономий создаются в корне вашей темы. В данном случае для категорий файл будет называться taxonomy-timeline.php, а для записи taxonomy-timeline-item.php.

В меню админки появится новый раздел.

Share: