Quantcast
Channel: iMasters - Paulo Faustino
Viewing all articles
Browse latest Browse all 20

Guia definitivo para criar Custom Post Types - Parte 01

$
0
0

Esta é a primeira parte do "Guia Definitivo sobre Custom Post Types". No total, serão cinco artigos, abrangendo toda a API dos tipos de publicações e categorias personalizadas.

Vamos explicar passo-a-passo como criar diferentes Custom Post Types no WordPress e estratégias para utilizar este fantástico recurso do WordPress para melhorar os seus Temas e/ou torná-los ainda mais eficientes.

  • Parte 01: Criar Custom Post Types e categorias personalizadas:
  • Parte 02: Estrutura e apresentação dos Custom Post Types
  • Parte 03: Extender as capacidades dos Custom Post Types
  • Parte 04: Custom Post Types e novas capacidades

      Vamos mostrar neste primeiro artigo como criar Custom Post Types e como associar novas categorias aos já existentes. Ao longo do artigo iremos extendendo o conhecimento da API e mostrar os truques que os developers usam para criar Custom Post Types com várias funcionalidades.

      O que são Custom Post Types e categorias personalizadas?

      Antes do WordPress 3.0, o utilizador e os developers só podiam usar os Custom Post Types definidos pelo WordPress:


      Posts, Páginas, Mídia e Links eram os únicos Custom Post Types que existiam e não era possível criar novos. Assim, os developers, quando precisavam criar novos Custom Post Types, tinham que buscar suporte nas Categorias para realizar conteúdos diferentes para cada publicação.

      Com as novas versões do WordPress é possível criar novos tipos de conteúdos separados dos Posts para gerir estes conteúdos diferentes. Por exemplo, é possível criar um tipo de conteúdo para hospedar uma base de dados de filmes, criando esse tipo de publicação e a chamando Filmes.

      Para isso, basta chamar a função register_post_type() e o WordPress irá se encarregar de criar o menu na administração, criar toda a interface de edição, listagem e todas as relações necessárias.

      Porém, além dos tipos de publicação, nós podemos criar tipos de categoria personalizadas também. Para Filmes podemos associar, por exemplo, um tipo de categoria: Categoria de Filmes.

      Se assim o fizermos, este tipo de categoria irá aparecer na interface de edição dos filmes, assim como aparecem Categorias e Tags para os Posts.

      Clique aqui para baixar todos os exemplos que apresentaremos ao longo deste artigo. O ideal é que você vá seguindo com o arquivo de exemplos.

      Criar tipos de publicações personalizadas

      Para adicionar um Custom Post Type, é preciso usar a função register_post_type. Esta função permite que você defina o tipo de publicação e como ela se comporta dentro do WordPress.

      Esta função é responsável por, ao passar os parâmetros pretendidos, fazer as associações necessárias e a criação de toda a interface para este tipo de publicação.

      Assim, para criar o tipo de post mais simples colocamos o seguinte no arquivo functions.php:

      add_action( 'init', 'create_post_type_film' );
      function create_post_type_film() {
      register_post_type( 'film',
      array(
      'labels' => array(
      'name' => __( 'Films' ),
      'singular_name' => __( 'Film' )
      ),
      'public' => true,
      )
      );
      }

      Esta função registra um tipo de publicação film (parâmetro passado no primeiro argumento da função) que é público, ou seja, pode ser mostrado no seu site, e que tem como nome plural Films e nome singular Film. As funções de tradução __() foram incluídas neste exemplo, uma vez que é normal os Custom Post Types estarem preparados para tradução.

      Obviamente, estes não são os únicos parâmetros de registo dos Custom Post Types, se assim fosse, serviria para muito pouco, não acham? 

      Podemos controlar todo o comportamento deste tipo de post passando os parâmetros que achamos necessários.

      Definindo novas labels

      Para modificar as labels associadas ao Post Type film, ou seja, as strings usadas na administração para mostrá-lo, basta passar à função um array com todas as labels modificadas. De outro modo, irá aparecer post em vez de film quando da visualização na administração:

      $labels = array(
      'name' => _x('Films', 'post type general name'),
      'singular_name' => _x('Film', 'post type singular name'),
      'add_new' => _x('Add New', 'film'),
      'add_new_item' => __('Add New Film'),
      'edit_item' => __('Edit Film'),
      'new_item' => __('New Film'),
      'all_items' => __('All Films'),
      'view_item' => __('View Film'),
      'search_items' => __('Search Films'),
      'not_found' => __('No Films found'),
      'not_found_in_trash' => __('No Films found in Trash'),
      'parent_item_colon' => '',
      'menu_name' => 'Films'
      );

      Este array deverá ser incluído dentro da função no lugar de ‘labels’ para que surta efeito:

      'labels' => $labels,

      Controlando o comportamento

      Novos parâmetros podem ser passados à função de modo a controlar o comportamento deste Post Type. Para isso podemos criar um array com esses parâmetros:

      $args = array(
      'labels' => $labels,
      'public' => true,
      'publicly_queryable' => true,
      'show_ui' => true,
      'show_in_menu' => true,
      'rewrite' => true,
      'capability_type' => 'post',
      'has_archive' => true,
      'hierarchical' => false,
      'menu_position' => null,
      'supports' => array('title','editor','author','thumbnail','excerpt','comments')
      );

      Este array apresenta os parâmetros essênciais e mais importantes. Existem mais, e você pode vê-los todos aqui no Codex do WordPress e explorar os Post Types à sua vontade.

      Tenha sempre atenção para não o fazer no seu site de produção, use uma instalação local no seu computador para fazer esses testes.

      Parâmetros aceitos pela função:

      • public – apresenta ou não o Post Type na administração do WordPress
      • public_queryable – se este tipo de publicação pode ou não ser visto no front-end do site
      • show_ui – se deve ou não ser construída uma interface por defeito
      • show_in_menu – se é ou não adicionado um link no menu da administração
      • rewrite – estando os links permamentes ligados, se deve este post type ter um URL próprio
      • capability_type – capacidades que os usuários deverão ter para poder editar este Post Type
      • has_archive – se o Post Type deve ou não ter uma listagem no front-end
      • hierarchical - deve ou não este Post Type ter a funcionalidade de associar hierarquias como nas páginas
      • menu_position - passando um número a este parâmetro, controlamos a localização do link no menu (nota: os números devem ser passados de 5 em 5. Exemplo: 5, 10, 15, 20, ….
      • supports – o que este Post Type deve conter ou não

      Este código se encontra incorporado no arquivo para download.


      Criar categorias personalizadas

      O processo é exatamente o mesmo, mas agora com a função register_taxonomy(). Esta função aceita como parâmetros o ID da categoria que vamos adicionar, um array com os tipos de posts associados e um array com os parâmetros que alteram o seu comportamento:

      add_action( 'init', 'create_taxonomy_film_category' );
      function create_taxonomy_film_category() {
      register_taxonomy( 'film_category', array( 'film' ), array(
      'hierarchical' => true,
      'label' => __( 'Film Category' ),
      'show_ui' => true,
      'show_in_tag_cloud' => true,
      'query_var' => true,
      'rewrite' => true,
      )
      );
      }

      Neste trecho do código dissemos à função para registar um tipo de categoria chamado ‘film_category’, que se associa ao Post Type ‘film’ e que recebe uns quantos parâmetros para controle do seu comportamento. Estes são os parâmetros:

      • hierarchical – se esta categoria customizada deve conter hierarquia, semelhante às Categorias do Posts. Caso seja passado false a categoria será idêntica às Tags dos Posts.
      • label – o nome da categoria que será visível na administração.
      • show_ui – se deve ou não ser mostrada no menu da administração.
      • show_in_tag_cloud – conhece aquele widget que produz uma nuvem das tags mais usadas? este parâmetro define se deve ou não aparecer essa nuvem.
      • query_var – se esta categoria pode ser visualizada a partir do front-end.

      Estes são os parâmetros mais importantes e usuais. Se quiser aprofundar o seu conhecimento, poderá dirigir-se ao Codex do WordPress e ver todos os parâmetros que esta função aceita.

      Definindo novas labels

      Tal como nos Post Types, é possível definir novas labels para as categorias personalizadas. Para isso, procedemos da mesma maneira passando à função um array com os labels pretendidos:

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

      Extender as URLs com o parâmetro rewrite e adicionar tags aos Post Types

      Entender o ciclo interno das ligações permanentes (rewrite links) é algo complicado e será matéria para um dos próximos capítulos dessa série, porém. Mas, sem termos que nos preocupar com as questões desse ciclo, podemos já começar por alterar e mudar o comportamento das URLs para os nossos Post Types e de categorias.

      Para isso passamos um array ao parâmetro rewrite para controlar algumas das suas propriedades.

      Rewrite nos Post Types

      Para controlar as URLs dos Post Types deve-se passar estes parâmetros da seguinte forma:

      'has_archive' => 'films',
      'rewrite' => array(
      'slug' => 'films',
      'with_front' => false,
      ),

      Se for passado uma string ao parâmetro has_archive, esta será usada como URL da página de listagem dos filmes, aparecendo como http://o-seu-site.com/films/.

      Para manter uniforme, passamos também ao parâmetros slug dentro do rewrite a mesma string. Desta maneira o seu site terá a seguinte estrutura de URL para o Post Type filme:

      Listagem de Filmes: http://o-seu-site.com/films/

      Página de detalhe de um Filme: http://o-seu-site.com/films/o-nome-do-filme/

      Rewrite de categorias personalizadas

      Para controlar os URLs das categorias personalizadas, passamos os parâmetros do rewrite da seguinte forma:

      'rewrite' => array(
      'slug' => 'films/categories',
      'with_front' => false,
      ),

      Normalmente uso uma estrutura de URLs adequada, neste caso a todas as categorias de filmes estão sobre a URL http://o-seu-site.com/films/categories/nome-da-categoria.

      Em ambos os casos, se o parâmetro with_front for verdadeiro, prefixa a estrutura de URLs com o parâmetro de acesso ao site de posts, por exemplo http://o-seu-site.com/blog/films/o-nome-do-filme/.

      Adicionar tags ao Post Types

      Para associar as categorias de Tags ao Post Types, isto é, para aparecerem na administração como tipo de categoria associada aos FIlmes, existe uma função que o faz de forma correta e fácil:

      register_taxonomy_for_object_type( 'tags', 'film' );

      Esta função deve ser chamada após o registo dos tipos de posts e das categorias envolvidas.

      Continuaremos o assunto nos próximos artigos. Até breve e bons estudos!

      ***

      Clique aqui para baixar o código fonte.


      Viewing all articles
      Browse latest Browse all 20