Dimas Anugerah
Woocommerce 3.5.x tiene una página especial en el área de la cuenta de usuario (Mi cuenta) donde muestra los pedidos anteriores del usuario.
Esta página ahora muestra 5 columnas de forma predeterminada.
Aquí la captura de pantalla del área de Pedidos de woocommerce con 5 columnas:
No puedo encontrar la manera de cambiar esto.
¿Cómo puedo agregar una nueva columna en el valor predeterminado?
LoicTheAztec
Esto requiere 2 funciones que agregarán una nueva columna
El segundo gancho de función es un gancho compuesto: woocommerce_my_account_my_orders_column_{$column_id}
dónde {$column_id}
debe ser reemplazado por el slug de clave de columna que se establece en la primera función.
Esa segunda función administra los valores de fila mostrados y puede agregar, por ejemplo, un campo personalizado para obtener valores de metadatos de pedidos personalizados.
El código:
add_filter( 'woocommerce_account_orders_columns', 'add_account_orders_column', 10, 1 );
function add_account_orders_column( $columns ){
$columns['custom-column'] = __( 'New Column', 'woocommerce' );
return $columns;
}
add_action( 'woocommerce_my_account_my_orders_column_custom-column', 'add_account_orders_column_rows' );
function add_account_orders_column_rows( $order ) {
// Example with a custom field
if ( $value = $order->get_meta( '_custom_field' ) ) {
echo esc_html( $value );
}
}
El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.
Ha terminado y ha agregado una columna personalizada a la tabla de pedidos de Mi cuenta:
Si desea realizar cambios en la salida html de la tabla, deberá anular el archivo de plantilla:
myaccount/orders.php
Si no desea cambiar la plantilla de pedido en la página de mi cuenta. Esto es lo que tienes que hacer.
Primero:
function wc_add_myaccount_order_column( $columns ) {
$columns[ 'custom-column' ] = __( 'Custom Column', 'woocommerce' );
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'wc_add_myaccount_order_column' );
Segundo:
function wc_custom_column_display( $order ) {
// do something here
echo "testing";
}
add_action( 'woocommerce_my_account_my_orders_column_custom-column', 'wc_custom_column_display' );
El código de arriba se mostrará “pruebas” en cada orden bajo “Columna personalizada” columna.
Nota: si realmente desea cambiar la plantilla completa, como el diseño, por ejemplo. Puedes seguir la primera respuesta anterior.
Solo para mejorar la respuesta aceptada, agrego una línea para elegir la posición de la columna (después del total):
function sv_wc_add_my_account_orders_column( $columns ) {
$new_columns = array();
foreach ( $columns as $key => $name ) {
$new_columns[ $key ] = $name;
// add ship-to after order status column
if ( 'order-total' === $key ) { //this is the line!
$new_columns['custom-column'] = __( 'Custom Column', 'woocommerce' );
}
}
return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'sv_wc_add_my_account_orders_column' );
function wc_custom_column_display( $order ) {
// do something here
echo "testing";
}
add_action( 'woocommerce_my_account_my_orders_column_custom-column', 'wc_custom_column_display' );
Con WooCommerce 5.9, no pude hacer funcionar la respuesta de LiocTheAztect. Lo que funcionó para mí fue:
add_filter( 'woocommerce_account_orders_columns',
'add_customer_email_column');
function add_customer_email_column( $columns ){
$new_columns = [
"order-number" => $columns["order-number"],
// ...
"customer-email" => __( 'Customer Email', '' ),
// ...
"order-actions" => $columns["order-actions"]
];
return $new_columns;
}
add_action( 'woocommerce_my_account_my_orders_column_customer-email',
'add_customer_email_content' );
function add_customer_email_content($order) {
echo esc_html($order->get_billing_email());
}
Sin el if ($value = $order->get_meta( '_custom_field' ))
bloquear. Espero eso ayude.