Como Criar um Custom Post Type no WordPress: Guia Completo para Iniciantes

Como Criar um Custom Post Type no WordPress: Guia Completo para Iniciantes

Publicado em 11/06/2024

WordpressProgramação

Hey Dev, se você está dando seus primeiros passos no mundo do desenvolvimento full-stack e quer dominar o WordPress, então está no lugar certo. Hoje, vamos falar sobre algo que pode parecer complicado no início, mas é um divisor de águas quando se trata de customização: criar um Custom Post Type no WordPress.

Por Que Criar um Custom Post Type?

Antes de entrarmos no código, vamos entender o porquê de criar um Custom Post Type (CPT):

1. Personalização Total: Com CPTs, você pode criar tipos de conteúdo personalizados, como portfólios, depoimentos, produtos e muito mais, além dos posts e páginas padrão.

2. Organização: Facilita a organização e exibição de diferentes tipos de conteúdo de maneira lógica e estruturada.

3. SEO: Custom Post Types bem configurados podem melhorar sua otimização para motores de busca, ajudando a atrair mais visitantes.

Customizar o código do seu tema no WordPress pode parecer desafiador no início, mas não se preocupe, vou te guiar pelo processo com um exemplo prático e dicas!

 
Porquê de criar um Custom Post Type (CPT) no WordPress

Colocando a Mão na Massa: Criando um Custom Post Type

 

Passo 1: Configurando o Ambiente

Antes de começar, certifique-se de que você tem um ambiente de desenvolvimento local configurado com WordPress. Pode ser através de ferramentas como Local by Flywheel, LAMP, XAMPP ou MAMP.

 

Passo 2: Adicionando Código ao functions.php

Abra o arquivo functions.php do seu tema ativo (localizado em wp-content/themes/seu_tema/functions.php), é aqui que vamos inserir criar o seu primeiro CPT. Para este exemplo, vamos criar um post customizado para Portfólio.


    function portfolio_cpt() {
        $labels = array(
            'name' => _x('Portfólios', 'Post Type General Name'),
            'singular_name' => _x('Portfólio', 'Post Type Singular Name'),
            'menu_name' => __('Portfólios'),
            'all_items' => __('Todos os Portfólios'),
            'view_item' => __('Ver Portfólio'),
            'add_new_item' => __('Adicionar Novo Portfólio'),
            'add_new' => __('Adicionar Novo'),
            'edit_item' => __('Editar Portfólio'),
            'update_item' => __('Atualizar Portfólio'),
            'search_items' => __('Buscar Portfólio'),
            'not_found' => __('Não Encontrado'),
            'not_found_in_trash' => __('Não Encontrado no Lixo'),
        );
        
        $args = array(
            'label' => __('portfólios'),
            'description' => __('Portfólios de Projetos'),
            'labels' => $labels,
            'supports' => array('title', 'editor', 'thumbnail', 'revisions'),
            'hierarchical' => false,
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'menu_position' => 5,
            'show_in_admin_bar' => true,
            'show_in_nav_menus' => true,
            'can_export' => true,
            'has_archive' => true,
            'exclude_from_search' => false,
            'publicly_queryable' => true,
            'capability_type' => 'post',
        );
        
        register_post_type('portfolio', $args);
    }
    
    add_action('init', 'portfolio_cpt');


Basicamente, são criados dois arrays contendo as informações da interface do post em $labels e outro para as configurações de comportamento e campos $args, para então registrarmos através da função register_post_type, e depois invocarmos a criação do post customizado através do hook add_action.

Agora vamos entender no detalhe cada variável contida nestes arrays:

 

Explicando o array $labels

O array `$labels` contém as strings usadas na interface administrativa do WordPress para descrever o novo Custom Post Type. Esses rótulos ajudam a tornar o CPT mais amigável e intuitivo para os usuários. Aqui está uma explicação de cada elemento:


$labels = array(
    'name' => _x('Portfólios', 'Post Type General Name'),
    'singular_name' => _x('Portfólio', 'Post Type Singular Name'),
    'menu_name' => __('Portfólios'),
    'all_items' => __('Todos os Portfólios'),
    'view_item' => __('Ver Portfólio'),
    'add_new_item' => __('Adicionar Novo Portfólio'),
    'add_new' => __('Adicionar Novo'),
    'edit_item' => __('Editar Portfólio'),
    'update_item' => __('Atualizar Portfólio'),
    'search_items' => __('Buscar Portfólio'),
    'not_found' => __('Não Encontrado'),
    'not_found_in_trash' => __('Não Encontrado no Lixo'),
);

1. name Nome plural geral do CPT. Aparece na interface do WordPress, por exemplo, no menu.

2. singular_name Nome singular do CPT. Usado em contextos onde um único item é referido.

3. menu_name Nome do CPT como ele aparece no menu de administração do WordPress.

4. all_items Texto que aparece na tela que lista todos os itens do CPT. Por exemplo, “Todos os Portfólios”.

5. view_item Texto do link para visualizar um item específico. Por exemplo, “Ver Portfólio”.

6. add_new_item Texto do botão para adicionar um novo item. Por exemplo, “Adicionar Novo Portfólio”.

7. add_new Texto do link para adicionar um novo item. Geralmente usado no menu. Por exemplo, “Adicionar Novo”.

8. edit_item Texto do link para editar um item. Por exemplo, “Editar Portfólio”.

9. update_item Texto do botão para atualizar um item. Por exemplo, “Atualizar Portfólio”.

10. search_items Texto do campo de busca. Por exemplo, “Buscar Portfólio”.

11. not_found Mensagem exibida quando nenhum item é encontrado. Por exemplo, “Não Encontrado”.

12. not_found_in_trash Mensagem exibida quando nenhum item é encontrado na lixeira. Por exemplo, “Não Encontrado no Lixo”.

 

Explicando $args

O array $args define as características do Custom Post Type. Ele controla como o CPT se comporta e como é apresentado na interface do WordPress.

$args = array(
    'label' => __('portfólios'),
    'description' => __('Portfólios de Projetos'),
    'labels' => $labels,
    'supports' => array('title', 'editor', 'thumbnail', 'revisions'),
    'hierarchical' => false,
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'menu_position' => 5,
    'show_in_admin_bar' => true,
    'show_in_nav_menus' => true,
    'can_export' => true,
    'has_archive' => true,
    'exclude_from_search' => false,
    'publicly_queryable' => true,
    'capability_type' => 'post',
);

1. label: Nome do CPT usado internamente. Geralmente, a forma plural do nome.

2. description: Descrição do que é o CPT. Aparece na interface de administração para ajudar os usuários a entenderem seu propósito.

3. labels: Array de rótulos. Referencia o array `$labels` definido anteriormente.

4. supports: Define os recursos suportados pelo CPT, como ‘title’ (título), ‘editor’ (editor de conteúdo), ‘thumbnail’ (imagem destacada) e ‘revisions’ (revisões).

5. hierarchical: Define se o CPT é hierárquico (como páginas) ou não (como posts). `false` para não-hierárquico, `true` para hierárquico.

6. public: Define se o CPT é público. `true` para ser acessível pelo público, `false` para não ser.

7. show_ui: Define se o CPT deve aparecer na interface de administração do WordPress. `true` para aparecer, `false` para não aparecer.

8. show_in_menu: Define se o CPT deve aparecer no menu de administração. `true` para aparecer, `false` para não aparecer.

9. menu_position: Define a posição do CPT no menu de administração. `5` posiciona logo após os posts.

10. show_in_admin_bar: Define se o CPT deve aparecer na barra de administração. `true` para aparecer, `false` para não aparecer.

11. show_in_nav_menus: Define se o CPT deve aparecer nos menus de navegação. `true` para aparecer, `false` para não aparecer.

12. can_export: Define se o CPT pode ser exportado. `true` para permitir exportação, `false` para não permitir.

13. has_archive: Define se o CPT deve ter uma página de arquivo. `true` para ter, `false` para não ter.

14. exclude_from_search: Define se o CPT deve ser excluído dos resultados de pesquisa. `false` para incluir, `true` para excluir.

15. publicly_queryable: Define se o CPT pode ser consultado publicamente através de URLs. `true` para permitir, `false` para não permitir.

16. capability_type: Define o tipo de capacidade usado para o CPT. `post` significa que o CPT compartilha capacidades com posts, `page` com páginas, ou pode-se definir capacidades personalizadas.

 

Esses arrays combinados permitem que você configure exatamente como seu Custom Post Type deve se comportar e ser apresentado na interface do WordPress, oferecendo flexibilidade e controle total sobre suas novas entradas de conteúdo.

 

Passo 3: Atualizando Permalinks

Após adicionar o código, não se esqueça de ir em Configurações > Links Permanentes e clicar em “Salvar alterações”. Isso garante que os novos tipos de posts sejam reconhecidos corretamente pelo WordPress.

 

Comparando com Alternativas

Se você está se perguntando se há uma maneira mais fácil, a resposta é sim. Plugins como Custom Post Type UI facilitam a criação de CPTs sem a necessidade de código. Porém, usar código oferece mais controle e é uma excelente prática para aprender mais sobre o funcionamento do WordPress.

 

Conclusão

Criar Custom Post Types no WordPress pode parecer uma tarefa assustadora no começo, mas com prática e paciência, você dominará essa técnica poderosa. Lembre-se, cada linha de código que você escreve é um passo a mais na sua jornada para se tornar um desenvolvedor full-stack competente.

Então, o que está esperando? Abra seu editor de código e comece a experimentar! E não se esqueça de compartilhar suas experiências nos comentários abaixo. Vamos aprender juntos!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *