WooCommerce – Adicionar coluna na página que lista os pedidos

WooCommerce - Adicionar coluna na página que lista os pedidos

Uma vez desenvolvi uma loja onde meu cliente vendia chaves de licença que seriam usadas para ativar o software que foi vendido. Então, a cada pedido feito, além de ficarem anexados aos pedidos dados como Nome e Email, a Chave de Licença, também, deveria ficar anexada ao pedido de cada comprador.

Ao acessar a página Pedidos, dentro da área administrativa do WordPress, você vê uma tabela que lista todos os pedidos que já foram feitos. Essa tabela pode ser ilustrada assim:

PedidoEnviar paraDataTotal

No entanto, a tabela deveria ter uma coluna com o nome de Chave, e ficaria assim:

PedidoEnviar paraDataTotalChave

Os pedidos do WooCommerce pertencem ao tipo de post shop_order.

Como adicionar nova coluna na página que mostra os pedidos?

  • Para adicionar uma nova coluna usamos o filtro manage_edit-${post_type}_columns;
  • Ou seja, nosso filtro para adição da nova coluna será escrito assim: manage_edit-shop_order_columns;
  • Veja o código abaixo e entenda!
<?php
/**
 * Add custom column to shop_order post type
 *
 * @param   $columns    array    Array of all registered columns.
 *
 * @return  array $new_columns
 */
function add_custom_column_to_shop_order( $columns ) {
	$new_columns                 = is_array( $columns ) ? $columns : array();
	$new_columns['software_key'] = __( 'Chave' );

	return $new_columns;
}

add_filter( 'manage_edit-shop_order_columns', 'add_custom_column_to_shop_order' );

Como inserir o valor da nova coluna na página que mostra os pedidos?

  • Para adicionar valores àquela coluna usaremos a ação manage_${post_type}_posts_custom_column;
  • Ou seja, no nosso exemplo a ação para adição de um valor será escrita assim: manage_shop_order_posts_custom_column;
  • Veja o código abaixo e entenda!
<?php
/**
 * Add custom value to custom column in admin on page that lists the shop_order post type.
 *
 * @param string $column This is the column id/key.
 */
function add_custom_column_value_to_shop_order( $column ) {
	global $post;

	if ( $column == 'software_key' ) {
		echo null !== get_post_meta( $post->ID, 'software_key' ) ? get_post_meta( $post->ID, 'software_key', true ) : '-';
	}
}

add_action( 'manage_shop_order_posts_custom_column', 'add_custom_column_value_to_shop_order' );

Filipe Seabra
Filipe Seabra
Full Stack Web Developer

Deixe um comentário