https://tdestudiodesign.com/wp-content/plugins/whatsapp/style.css

En WooCommerce, la capacidad de Los pedidos duplicados rápidamente pueden ahorrar tiempo al administrar compras repetidas o crear pedidos similares. Sin embargo, esta función no está disponible de forma predeterminada. Si bien los complementos existen para agregarlo, pueden ser complejos o engreños para los casos de uso simples.

Este fragmento de PHP personalizado agrega un «DuplicadoBotón «a las acciones de pedido en el tablero de WordPress. Duplica el orden directamente en la base de datosofreciendo una solución liviana sin sobrecarga innecesaria.

Si necesita una forma práctica y eficiente de duplicar las órdenes de WooCommerce directamente del «Órdenes«Página de administración, este enfoque ofrece una solución a medida que se integra perfectamente con su flujo de trabajo existente.

Aquí están los botones duplicados que verá una vez que el fragmento a continuación esté activo en su sitio web.

Php Snippet: agregue el botón «Orden duplicado» @ WooCommerce Orders Table Acción

Notas:

  • Este fragmento establecerá el clonado estado de pedido a «pendiente».
  • Esto no reducirá el existencias En el orden duplicado, si el pedido original redujo el stock. Esto se debe a que el orden original tiene el ‘_order_stock_reduced‘Post Meta Set en «Sí». Sin embargo, lo bueno es que puedes omitir la duplicación de esta publicación específica Meta usando el ‘bbloomer_excluded_order_meta_keys‘Filtro que se proporciona a continuación y, por lo tanto, espere una reducción de acciones cada vez que establezca el estado del pedido en uno de los estados de reducción de existencias.
  • Esto no asignará Permisos descargables En caso de que el pedido duplicado tenga productos descargables y esté configurado el estado de pedido para completar, por las razones exactas como ‘_order_stock_reduced‘Post Meta. En este caso, debe excluir ‘download_permissions_granted‘a través del’bbloomer_excluded_order_meta_keys‘Filtrar, para que pueda concederlos cuando complete el pedido
  • Probablemente, el mismo problema sucede con ‘new_order_email_sent‘,’Recorded_sales‘,’Recorded_coupon_usage_countspost meta
  • No uso Análisis de WooCommerce así que no estoy seguro de si el pedido duplicado se sincroniza una vez que lo complete

Fragmento de pedido duplicado #1 – No HPOS

 /**  * @snippet       Duplicate WooCommerce Order (No HPOS)  * @how-to        businessbloomer.com/woocommerce-customization  * @author        Rodolfo Melogli, Business Bloomer  * @compatible    WooCommerce 9  * @community     https://businessbloomer.com/club/  */  add_filter( 'woocommerce_admin_order_actions', 'bbloomer_duplicate_order_button', 9999, 2 );  function bbloomer_duplicate_order_button( $actions, $order ) { $actions['duplicate_order'] = array( 'url' => wp_nonce_url( admin_url( 'edit.php?post_type=shop_order&action=duplicate_order&order_id=' . $order->get_id() ), 'bbloomer-duplicate-order' ), 'name' => __( 'Duplicate', 'woocommerce' ), 'action' => 'duplicate_order', ); return $actions; }  add_action( 'admin_head', 'bbloomer_duplicate_order_button_css' );  function bbloomer_duplicate_order_button_css() { echo ''; }  add_action( 'admin_action_duplicate_order', 'bbloomer_duplicate_order' );  function bbloomer_duplicate_order() {  if ( current_user_can( 'edit_shop_orders' ) && isset( $_GET['order_id'] ) && check_admin_referer( 'bbloomer-duplicate-order' ) ) {  global $wpdb;  $order_id = absint( wp_unslash( $_GET['order_id'] ) );  $order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->posts} WHERE ID = %d", $order_id ), ARRAY_A ); if ( ! $order ) { return new WP_Error( 'invalid_order', __( 'Order not found' ) ); }  unset( $order['ID'] ); $order['post_date'] = current_time( 'mysql' ); $order['post_date_gmt'] = current_time( 'mysql', 1 );     $order['post_status'] = apply_filters( 'bbloomer_duplicate_order_status', 'wc-pending', $order_id );      $wpdb->insert( $wpdb->posts, $order ); $new_order_id = $wpdb->insert_id;  $meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $order_id ) ); $excluded_meta_keys = apply_filters( 'bbloomer_excluded_order_meta_keys', [], $order_id ); foreach ( $meta as $meta_row ) { if ( in_array( $meta_row->meta_key, $excluded_meta_keys, true ) ) { continue; } $wpdb->insert( $wpdb->postmeta, [ 'post_id' => $new_order_id, 'meta_key' => $meta_row->meta_key, 'meta_value' => $meta_row->meta_value ] ); }  $items = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d", $order_id ), ARRAY_A ); foreach ( $items as $item ) { $old_item_id = $item['order_item_id']; unset( $item['order_item_id'] ); $item['order_id'] = $new_order_id; $wpdb->insert( "{$wpdb->prefix}woocommerce_order_items", $item ); $new_item_id = $wpdb->insert_id; $item_meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE order_item_id = %d", $old_item_id ) ); foreach ( $item_meta as $meta ) { $wpdb->insert( "{$wpdb->prefix}woocommerce_order_itemmeta", [ 'order_item_id' => $new_item_id, 'meta_key' => $meta->meta_key, 'meta_value' => $meta->meta_value ] ); } }  wp_safe_redirect( admin_url( 'edit.php?post_type=shop_order' ) );     exit;  }  } 

Fragmento de pedido duplicado #2 – HPOS

Nota: Esto no se ha probado ya que no uso HPO.

 /**  * @snippet       Duplicate WooCommerce Order (HPOS)  * @how-to        businessbloomer.com/woocommerce-customization  * @author        Rodolfo Melogli, Business Bloomer  * @compatible    WooCommerce 9  * @community     https://businessbloomer.com/club/  */  add_filter( 'woocommerce_admin_order_actions', 'bbloomer_duplicate_order_button', 9999, 2 );  function bbloomer_duplicate_order_button( $actions, $order ) { $actions['duplicate_order'] = array( 'url' => wp_nonce_url( admin_url( 'edit.php?post_type=shop_order&action=duplicate_order&order_id=' . $order->get_id() ), 'bbloomer-duplicate-order' ), 'name' => __( 'Duplicate', 'woocommerce' ), 'action' => 'duplicate_order', ); return $actions; }  add_action( 'admin_head', 'bbloomer_duplicate_order_button_css' );  function bbloomer_duplicate_order_button_css() { echo ''; }  add_action( 'admin_action_duplicate_order', 'bbloomer_duplicate_order' );  function bbloomer_duplicate_order() {  if ( current_user_can( 'edit_shop_orders' ) && isset( $_GET['order_id'] ) && check_admin_referer( 'bbloomer-duplicate-order' ) ) {  global $wpdb;  $order_id = absint( wp_unslash( $_GET['order_id'] ) );  $order = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wc_orders WHERE id = %d", $order_id ) ); if ( ! $order ) { return new WP_Error( 'invalid_order', __( 'Order not found' ) ); }  unset( $order['ID'] ); $order['post_date'] = current_time( 'mysql' ); $order['post_date_gmt'] = current_time( 'mysql', 1 );     $order['post_status'] = apply_filters( 'bbloomer_duplicate_order_status', 'wc-pending', $order_id );      $wpdb->insert( "{$wpdb->prefix}wc_orders", $order ); $new_order_id = $wpdb->insert_id;  $meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->prefix}wc_order_metadata WHERE post_id = %d", $order_id ) ); $excluded_meta_keys = apply_filters( 'bbloomer_excluded_order_meta_keys', [], $order_id ); foreach ( $meta as $meta_row ) { if ( in_array( $meta_row->meta_key, $excluded_meta_keys, true ) ) { continue; } $wpdb->insert( "{$wpdb->prefix}wc_order_metadata", [ 'post_id' => $new_order_id, 'meta_key' => $meta_row->meta_key, 'meta_value' => $meta_row->meta_value ] ); }  $items = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}wc_order_items WHERE order_id = %d", $order_id ) ); foreach ( $items as $item ) { $old_item_id = $item['order_item_id']; unset( $item['order_item_id'] ); $item['order_id'] = $new_order_id; $wpdb->insert( "{$wpdb->prefix}wc_order_items", $item ); $new_item_id = $wpdb->insert_id; $item_meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->prefix}wc_order_itemmeta WHERE order_item_id = %d", $old_item_id ) ); foreach ( $item_meta as $meta ) { $wpdb->insert( "{$wpdb->prefix}wc_order_itemmeta", [ 'order_item_id' => $new_item_id, 'meta_key' => $meta->meta_key, 'meta_value' => $meta->meta_value ] ); } }  wp_safe_redirect( admin_url( 'edit.php?post_type=shop_order' ) );     exit;  }  } 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *