Categorias
Programação Wordpress

Criando Custom Post Types no WordPress

Custom Post Types é a função usada para manipulação de conteúdo no WordPress, com ela pode-se criar conteúdos personalizados, diferentes dos 5 tipos de postes padrão do WordPress…

Isso permite que o WordPress seja usado para uma ampla gama de gerenciamento de conteúdo e não apenas para criar blogs.

Criando Custom Post Types

Este assunto é muito amplo e as possibilidades de se usar conteúdos personalizados são ilimitadas. Então vamos criar um exemplo de Portfolio, que poderá ser usado em qualquer Web site que use o WordPress como CMS.

O código php que vamos criar pode ser colocado diretamente no arquivo «functions.php» ou pode-se criar um arquivo próprio e usar um include para o adicionar ao «functions.php».

<?php
#
# ==============================================================================
# Adding Custom Post Type for Portfolio
# ==============================================================================
#     

function my_custom_post_portfolio() {
  $labels = array(
    'name'                  => __( 'Portfolio', 'text-domain' ),
    'singular_name'         => __( 'Portfolio Item', 'text-domain' ),
    'menu_name'             => _x( 'Portfolio', 'admin menu', 'text-domain' ),
    'name_admin_bar'        => _x( 'Portfolio Item', 'add new on admin bar', 'text-domain' ),
    'add_new'               => __( 'Add New Item', 'text-domain' ),
    'add_new_item'          => __( 'Add New Portfolio Item', 'text-domain' ),
    'new_item'              => __( 'Add New Portfolio Item', 'text-domain' ),
    'edit_item'             => __( 'Edit Portfolio Item', 'text-domain' ),
    'view_item'             => __( 'View Item', 'text-domain' ),
    'all_items'             => __( 'All Portfolio Items', 'text-domain' ),
    'search_items'          => __( 'Search Portfolio', 'text-domaine' ),
    'parent_item_colon'     => __( 'Parent Portfolio Item:', 'text-domain' ),
    'not_found'             => __( 'No portfolio items found', 'text-domain' ),
    'not_found_in_trash'    => __( 'No portfolio items found in trash', 'text-domain' ),
    'filter_items_list'     => __( 'Filter portfolio items list', 'text-domain' ),
    'items_list_navigation' => __( 'Portfolio items list navigation', 'text-domain' ),
    'items_list'            => __( 'Portfolio items list', 'text-domain' ),
  );
  $args = array(
    'labels'          => $labels,
    'description'     => __('Displays my portfolio and their ratings', 'text-domain'),
    'supports'        => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    'public'          => true,
    'capability_type' => 'post',
    'rewrite'         => array( 'slug' => 'portfolio', ), // Permalinks format
    'menu_position'   => 5,
    'menu_icon'       => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-portfolio' : false ,
    'has_archive'     => true,
  );   
  register_post_type( 'portfolio', $args );
}
add_action( 'init', 'my_custom_post_portfolio' );
?>

Primeiro criamos a função my_custom_post_portfolio(), depois com a função add_action dizemos ao wordpress registar o nosso novo post type. Na variável $labels indicamos os valores para cada título do post type e na variável $args colocamos as informações do post type. Aconselho ler o texto do site «codex.wordpress.org» para uma informação mais detalhada sobre register_post_type()

Criando Custom Taxonomies

Os posts padrão do WordPress usam categorias e etiquetas para organizar o conteúdo. Ao usar «Custom Post Types» podemos criar uma estrutura de conteúdo diferente, mais específica para nosso site. Criar taxonomias personalizadas permite-nos ter categorias e etiquetas no nosso post personalizado diferentes das categorias e etiquetas padrão do WordPress.

Então devemos registar taxonomias personalizadas usando register_taxonomy();

<?php
#
# ==============================================================================
# creating custom taxonomies for categories on portfolio custom post
# ==============================================================================
#

function my_cat_taxonomies_portfolio() {
  $labels = array(
    'name'                       => __( 'Portfolio Categories', 'text-domain' ),
    'singular_name'              => __( 'Portfolio Category', 'text-domain' ),
    'menu_name'                  => __( 'Portfolio Categories', 'text-domain' ),
    'edit_item'                  => __( 'Edit Portfolio Category', 'text-domain' ),
    'update_item'                => __( 'Update Portfolio Category', 'text-domain' ),
    'add_new_item'               => __( 'Add New Portfolio Category', 'text-domain' ),
    'new_item_name'              => __( 'New Portfolio Category Name', 'text-domain' ),
    'parent_item'                => __( 'Parent Portfolio Category', 'text-domain' ),
    'parent_item_colon'          => __( 'Parent Portfolio Category:', 'text-domain' ),
    'all_items'                  => __( 'All Portfolio Categories', 'text-domain' ),
    'search_items'               => __( 'Search Portfolio Categories', 'text-domain' ),
    'popular_items'              => __( 'Popular Portfolio Categories', 'text-domain' ),
    'separate_items_with_commas' => __( 'Separate portfolio categories with commas', 'text-domain' ),
    'add_or_remove_items'        => __( 'Add or remove portfolio categories', 'text-domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used portfolio categories', 'text-domain' ),
    'not_found'                  => __( 'No portfolio categories found.', 'text-domain' ),
    'items_list_navigation'      => __( 'Portfolio categories list navigation', 'text-domain' ),
    'items_list'                 => __( 'Portfolio categories list', 'text-domain' ),
  );
  $args = array(
    'labels'            => $labels,
    'public'            => true,
    'show_in_nav_menus' => true,
    'show_ui'           => true,
    'show_tagcloud'     => true,
    'hierarchical'      => true,
    'rewrite'           => array( 'slug' => 'portfolio_category' ),
    'show_admin_column' => true,
    'query_var'         => true,
  );
  register_taxonomy( 'portfolio_category', 'portfolio', $args );
}
add_action( 'init', 'my_cat_taxonomies_portfolio', 0 );
?>

Como podemos ver, criamos a função my_cat_taxonomies_portfolio(), depois com a função add_action dizemos ao wordpress registar a nova taxonomia para o nosso post type. Na variável $labels indicamos os valores para cada título da taxonomia e na variável $args colocamos as informações da taxonomia. Aconselho ler o texto do site «codex.wordpress.org» para uma informação mais detalhada sobre register_taxonomy

Bom neste artigo ficamos por aqui, vimos como usar o «Custom Post Types» e já temos o nosso post type «portfolio» criado e a funcionar. No próximo artigo vamos ver como criar taxonomies para tag e criar o template para mostrar o nosso conteúdo personalizado.

Um abraço…



Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *