WordPress

Adicionar coluna custom field no admin – Custom Post Type

Salve galáxia, nesse tutorial de WordPress, vou mostrar como adicionar coluna custom field no admin de um custom post type. Conforme prometi no meu post sobre como criar custom post type, vou ensinar diversos macetes bastante úteis quando se esta trabalhando com Tipo de post personalizado e todo post que for relacionado com post-type vou tentar colocar depois do título, Custom Post Type para facilitar a ligação entre eles.

Porque adicionar coluna custom-field no admin?

Imagine que você tem centenas de post e por algum motivo seria interessante que na grid da listagem de post aparecesse informações de um determinado custom field.

No exemplo, temos um custom post type chamado portifolio, com 3 campos personalizados (custom fields) com os seguintes nomes: cliente, servico e ano. Então eu vou inserir na grid, a coluna com os dados de dois campos: Cliente e Serviço. Chega de conversa e mãos à obra.

Clique aqui e veja o exemplo

Passo 1: Criando as Colunas no admin

Como já mencionei acima, vamos criar as colunas serviços e cliente na grid da listagem de posts, então para isso vamos abrir nosso arquivo functions.php que geralmente fica no seguinte caminho: /wp-content/themes/nome-do-seu-tema/functions.php, e vamos adicionar a função abaixo na última linha do nosso arquivo.

PHP

// ADD COLUNA DE CUSTOM FIELD AO ADMIN
add_filter('manage_edit-portifolio_columns', 'minha_coluna'); // Altere o 'portifolio' pelo nome do seu custom-post-type
function minha_coluna($colunas) { // Inicia a função
$colunas['servico'] = 'Serviços'; // Cria coluna Serviços
$colunas['cliente'] = 'Cliente'; // Cria coluna Cliente
return $colunas; // Exibe as colunas
}

Alguns detalhes da função acima:
- Na linha 2, alterar o manage_edit-portifolio_columns pelo nome do seu tipo de post.
- Na linha 3, servico corresponde ao nome do nosso custom field (meta_key) e Serviços é o label que será exibido no topo da coluna.
- Na linha 4, cliente corresponde ao nome do nosso custom field (meta_key) e Cliente é o label que será exibido no topo da coluna.

Agora que as colunas estão criadas, vamos ao próximo passo.

Passo 2: Exibindo os dados (meta_value) nas colunas

No passo anterior, apenas criamos as colunas, porém nenhum dado (meta_value) é exibido ainda, para que esses conteúdos sejam mostrados, vamos criar a função abaixo.

PHP

// ADD META VALUE NAS COLUNAS SERVIÇOS E CLIENTES DO ADMIN DE PORTIFOLIO
add_action('manage_posts_custom_column', 'exibir_minha_coluna');
function exibir_minha_coluna($nome) { // Inicia a função
global $post;
switch ($nome) {
case 'servico': // Custom field name (meta_key)
$servico = get_post_meta($post->ID, 'servico', true); // chama meta_value da meta_key servico
echo $servico; // exibe meta_value
}
switch ($nome) {
case 'cliente': // Custom field name (meta_key)
$cliente = get_post_meta($post->ID, 'cliente', true); // chama meta_value da meta_key cliente
echo $cliente; // exibe meta_value
}
}

Alguns detalhes da função acima:
- Na linha 6 e 7, servico corresponde ao nome do nosso custom field (meta_key)
- Na linha 11 e 12, cliente corresponde ao nome do nosso custom field (meta_key)

É isso, agora você já adicionou coluna custom field no admin, e está exibindo os conteúdos dos meta_key (servico e cliente).

Mas e se você precisar deixar as colunas ordenáveis? Antes que me pergunte, deixei um bônus aqui embaixo.

BÔNUS

Passo 3: Ordenar coluna por custom field (meta_value) no admin

Pra você que precisa deixar as colunas ordenáveis por meta_value, adicione a função abaixo.

PHP

add_filter( 'manage_edit-portifolio_sortable_columns', 'ordenar_minha_coluna' ); // Altere o 'portifolio' pelo nome do seu custom-post-type
function ordenar_minha_coluna( $post_colunas ) { // Inicia a função
$post_colunas = array(
'servico' => 'servico', // Ordenação por servico
'cliente' => 'cliente' // Ordenação por cliente
); 
return $post_colunas;
}
add_filter( 'parse_query', 'sort_posts_by_meta_value' );
function sort_posts_by_meta_value($query) {
    global $pagenow;
    if (is_admin() && $pagenow=='edit.php' &&
        isset($_GET['post_type']) && $_GET['post_type']=='feiras' &&
        isset($_GET['orderby'])  && $_GET['orderby'] !='None')  {
        $query->query_vars['orderby'] = 'meta_value';
        $query->query_vars['meta_key'] = $_GET['orderby'];
    }
}

Alguns detalhes da função acima:
- Na linha 1, alterar o manage_edit-portifolio_sortable_columns pelo nome do seu tipo de post.
- Na linha 5, servico corresponde ao nome do nosso custom field (meta_key)
- Na linha 6 cliente corresponde ao nome do nosso custom field (meta_key)
- Na linha 16, portifolio corresponde ao nome do nosso custom-post-type

Pronto, salve seu arquivo functions.php e terminamos de inserir a coluna custom field no admin e deixamos ela ordenável (orderby=meta_value), simples né?

Clique aqui e veja o exemplo
Clique aqui e veja o código completo no GitHub
Clique aqui e faça download do arquivo do exemplo.

FONTE I: Deluxe Blog Tips
FONTE II: Egg Plant Studios

E você, o que achou do tutorial de como adicionar coluna custom field no admin do WordPress? Achou fácil? Ficou com dúvidas? Comente.

Se o post te ajudou curte a página, não custa nada e me incentiva a continuar escrevendo.
Posts recomendados
Comentários

    Envie seu comentário.

    Seu email não será publicado