¡Cómo crear un estado de pedido personalizado en WooCommerce!

21 ago 2015, 14:32:04
Vistas: 24.2K
Votos: 13

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?

0
Todas las respuestas a la pregunta 2
7
17

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.

21 ago 2015 14:57:11
Comentarios

@AparnaMathew me alegra que esté funcionando. :)

Magnetize Magnetize
24 ago 2015 10:50:18

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 Nathan
2 jun 2018 02:03:32

@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.

Magnetize Magnetize
4 jun 2018 11:03:59

¿Esto todavía aplica para WooCommerce 3.x?

Amjad Amjad
10 jun 2018 00:01:03

@Amjad así es, lo estoy usando en este momento. :)

Magnetize Magnetize
10 jun 2018 11:50:48

De hecho, también funciona en 3.x. ¡Gracias @Magnetize!

Amjad Amjad
12 jun 2018 01:12:34

¿Y qué hay de hacer la suma de los pedidos en el panel de control de WooCommerce?

David David
26 mar 2019 10:25:49
Mostrar los 2 comentarios restantes
0

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!

3 oct 2018 14:49:08