¡Cómo crear un estado de pedido personalizado en WooCommerce!
He intentado el siguiente código para crear un estado personalizado.
add_action( 'init', function() {
$term = get_term_by( 'name', 'shipped', 'shop_order_status' );
if ( ! $term ) {
wp_insert_term( 'shipped', 'shop_order_status' );
}
} );
Pero no está funcionando. También probé otros métodos. ¿Alguien puede ayudarme con esto?

Esto es lo que he utilizado para crear un estado de pedido personalizado llamado "Facturado". Añade esto al archivo functions.php de tu tema:
// Nuevo estado de pedido PARA WooCommerce 2.2+
add_action( 'init', 'registrar_mis_nuevos_estados_pedido' );
function registrar_mis_nuevos_estados_pedido() {
register_post_status( 'wc-facturado', array(
'label' => _x( 'Facturado', 'Estado del pedido', 'woocommerce' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Facturado <span class="count">(%s)</span>', 'Facturado<span class="count">(%s)</span>', 'woocommerce' )
) );
}
add_filter( 'wc_order_statuses', 'mis_nuevos_estados_pedido_wc' );
// Registrar en wc_order_statuses
function mis_nuevos_estados_pedido_wc( $order_statuses ) {
$order_statuses['wc-facturado'] = _x( 'Facturado', 'Estado del pedido', 'woocommerce' );
return $order_statuses;
}
Para añadir tu nuevo estado al menú desplegable de Edición masiva en el administrador, debes usar JavaScript.
Añade tu función a la acción admin_footer
.
Mi función queda así:
function personalizar_pie_admin_masivo() {
global $post_type;
if ( $post_type == 'shop_order' ) {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('<option>').val('marcar_facturado').text('<?php _e( 'Marcar como facturado', 'textdomain' ); ?>').appendTo("select[name='action']");
jQuery('<option>').val('marcar_facturado').text('<?php _e( 'Marcar como facturado', 'textdomain' ); ?>').appendTo("select[name='action2']");
});
</script>
<?php
}
}
La acción se añade dos veces porque hay una acción masiva en la parte superior y otra en la parte inferior de la lista de pedidos.

Esto lo añade a la pantalla de pedido individual, y una vez que marcas un pedido con este nuevo estado de pedido, obtienes la navegación sobre la lista de pedidos (es decir, Todos, Míos, Pendientes, etc.) pero no lo añade al menú desplegable de edición masiva. ¿Alguna idea sobre eso, @Magnetize?

@Nathan ¡Hola! Sí, de hecho lo tengo, pero tienes que añadir las acciones masivas mediante js. Edité mi respuesta ya que es demasiado larga para un comentario.

Como complemento a lo anterior y para no usar JavaScript para agregar las acciones en la lista de acciones masivas, puedes usar el hook bulk_actions-edit-shop_order
para agregar/reordenar las acciones masivas. Por ejemplo:
function rename_or_reorder_bulk_actions( $actions ) {
$actions = array(
// este es el orden en el que se muestran las acciones; puedes cambiarlas
'mark_processing' => __( 'Marcar como pedido', 'textdomain' ), // reescribir un estado existente
'mark_invoiced' => __( 'Marcar como facturado', 'textdomain' ), // agregar uno nuevo
'mark_completed' => $actions['mark_completed'],
'remove_personal_data' => $actions['remove_personal_data'],
'trash' => $actions['trash'],
);
return $actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'rename_or_reorder_bulk_actions', 20 );
¡Saludos!
