Custom Post Types/Tipos de conteúdo

Para facilitar a criação de tipos de conteúdo (Post Type) criamos a classe Odin_Post_Type para auxiliar a construção.

Instalação

Adicione a seguinte linha em seu functions.php:

require_once get_template_directory() . '/core/classes/class-post-type.php';
1

Criando um Post Type

Devemos instanciar a classe para criar os Post Types:

$video = new Odin_Post_Type(
    'Video', // Nome (Singular) do Post Type.
    'video' // Slug do Post Type.
);
1
2
3
4

Com apenas isso é possível criar um Post Type que irá ter os seguintes argumentos:

$args = array(
    'hierarchical'        => false,
    'supports'            => array( 'title', 'editor', 'thumbnail', 'comments', 'revisions' ),
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => false,
    'publicly_queryable'  => true,
    'exclude_from_search' => false,
    'has_archive'         => true,
    'query_var'           => true,
    'can_export'          => true,
    'rewrite'             => true,
    'capability_type'     => 'post'
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Configurando os títulos ($labels)

É possível alterar os $labels utilizando o método set_labels():

$video->set_labels(
    array(
        'menu_name' => __( 'Meus Videos', 'odin' )
    )
);
1
2
3
4
5

São aceitos todos os $labels da função register_post_type().

Configurando os argumentos

Também é possível modificar os argumentos ao seu gosto utilizando o método set_arguments():

$video->set_arguments(
    array(
        'supports' => array( 'title', 'editor', 'thumbnail' )
    )
);
1
2
3
4
5

No exemplo acima, os "supports" foram modificados para ter apenas "title", "editor" e "thumbnail". Você pode utilizar isso para adicionar ou alterar qualquer argumento do Post Type.

São aceitos todos os argumentos da função register_post_type().

Adicionando ícones para o Post Type no wp-admin

O set_arguments() permite utilizar qualquer um dos argumentos disponíveis para a função register_post_type().

Portanto, vamos utilizar o argumento 'menu_icon', para definir um ícone para o novo Post Type no menu do wp-admin.

Para isso, usamos uma url completa de algum ícone, ou qualquer um dos nomes dos WordPress DashIcons.

$video->set_arguments(
    array(
        'supports' => array( 'title', 'editor', 'thumbnail' ),
        'menu_icon' => 'dashicons-format-video'
    )
);
1
2
3
4
5
6

Adicionamos este ícone, com nome dashicons-format-video, para o Post Type Vídeo.

Exemplo completo

Exemplo de como utilizar e funcionar corretamente as traduções:

function odin_video_cpt() {
    $video = new Odin_Post_Type(
        'Video', // Nome (Singular) do Post Type.
        'video' // Slug do Post Type.
    );

    $video->set_labels(
        array(
            'menu_name' => __( 'Meus Videos', 'odin' )
        )
    );

    $video->set_arguments(
        array(
            'supports' => array( 'title', 'editor', 'thumbnail' )
        )
    );
}

add_action( 'init', 'odin_video_cpt', 1 );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Código fonte

Odin_Post_Type esta localizado em core/classes/class-post-type.php.