Como completar pedidos automáticamente (para que salten automatizaciones como AutomatorWP), poder editar pedidos y añadir un nuevo estado de pedido como «Enviado».
// Completar pedidos automáticamente woocommerce
function fla_actualiza_estado_pedidos_a_completado($order_id)
{
global $woocommerce;
//ID's de las pasarelas de pago a las que afecta
$paymentMethods = array('stripe', 'paypal', 'ppcp-gateway');
if (!$order_id) return;
$order = new WC_Order($order_id);
if (!in_array($order->payment_method, $paymentMethods)) return;
$order->update_status('completed');
}
add_action('woocommerce_order_status_processing', 'fla_actualiza_estado_pedidos_a_completado', 5);
// Editar Pedidos woocommerce
function bbloomer_custom_order_status_editable( $allow_edit, $order ) {
if ( $order->get_status() === 'completed' ) {
$allow_edit = true;
}
return $allow_edit;
}
add_filter( 'wc_order_is_editable', 'bbloomer_custom_order_status_editable', 9999, 2 );
// Añadir estado de pedido "Enviado"
function register_enviado_order_status() {
register_post_status( 'wc-enviado', array(
'label' => 'Enviado',
'public' => true,
'show_in_admin_status_list' => true,
'show_in_admin_all_list' => true,
'exclude_from_search' => false,
'label_count' => _n_noop( 'Enviado <span class="count">(%s)</span>', 'Enviado <span class="count">(%s)</span>' )
) );
}
add_action( 'init', 'register_enviado_order_status' );
function add_enviado_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_order_statuses['wc-enviado'] = 'Enviado';
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_enviado_to_order_statuses' );
function add_enviado_bulk_actions( $bulk_actions ) {
$bulk_actions['mark_enviado'] = 'Cambiar a Enviado';
return $bulk_actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'add_enviado_bulk_actions', 20, 1 );
function handle_enviado_bulk_actions( $redirect_to, $action, $post_ids ) {
if ( $action !== 'mark_enviado' ) {
return $redirect_to;
}
foreach ( $post_ids as $post_id ) {
$order = wc_get_order( $post_id );
$order->update_status( 'enviado' );
}
$redirect_to = add_query_arg( 'bulk_enviado_orders', count( $post_ids ), $redirect_to );
return $redirect_to;
}
add_filter( 'handle_bulk_actions-edit-shop_order', 'handle_enviado_bulk_actions', 10, 3 );
function enviado_status_label_color( $order ) {
?>
<style>
mark.order-status.status-enviado.tips {
background-color: cornflowerblue;
color: white;
}
</style>
<?php
}
add_action( 'admin_head', 'enviado_status_label_color' );