آموزش کدهای ووکامرس

اجازه دادن به مشتریان برای ویرایش سفارشات در حال انجام

آیا می‌خواهید مشتریان شما بتوانند قبل از تایید سفارش‌هایشان توسط مدیریت فروشگاه، سفارش خود را تغییر دهند؟ با آموزش چگونگی اجازه دادن به مشتریان برای ویرایش سفارشات در حال انجام با وردپرس آبی باشید.

این کار را با یک قطعه کد بدون نیاز به استفاده از افزونه می‌توان به آسانی پیاده کرد. از آنچه که فکر می‌کنید آسان‌تر است. افزودن این ویژگی چه فایده‌ای دارد؟ در خیلی از موارد ممکن است مشتری تصمیمش برای سفارش خود تغییر کرده باشد، شاید بخواهد سفارش را افزایش بدهد یا موردی را اشتباهاً اضافه کرده باشد.

اما برای اصلاح سفارش خود تنها مجبور است از طریق راه‌های ارتباطی فروشگاه شما درخواست تغییر و اصلاح را بدهد.

اما چرا کار را برای خودتان و مشتری پیچیده می‌کنید؟ بگذارید مشتری خودش سفارش‌ را اصلاح کند. ما در این آموزش یک قطعه کد کاملاً بهینه را برای شما آماده کرده‌ایم که در صورت استفاده از آن، این قابلیت جذاب به وب‌سایت‌‌تان اضافه می‌گردد.

اجازه دادن به مشتریان برای ویرایش سفارشات در حال انجام اجازه دادن به مشتریان برای ویرایش سفارشات در حال انجام اجازه دادن به مشتریان برای ویرایش سفارشات در حال انجام

اگر قالب شما چایلد تم (Child theme) دارد، این قطعه کد را در داخل فایل فانکشن functions.php قرار دهید و ذخیره نمایید. اگر چایلد هم ندارید، کدها را مستقیم در فایل فانکشن پوسته وردپرس خود بگذارید. با ذخیره این روند، دیگر هیچ کار اضافی لازم نیست!

/**
 * @snippet       Edit Order Functionality @ WooCommerce My Account Page
 * @how-to        Watch tutorial @ https://themefour.com/allowing-customers-to-edit-orders-in-progress/
 * @sourcecode    https://themefour.com
 * @author        THEMEFOUR.COM
 * @compatible    WooCommerce 4.0.1
 */
  
// ----------------
// 1. Allow Order Again for Processing Status
  
add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'tfc_order_again_statuses' );
  
function tfc_order_again_statuses( $statuses ) {
    $statuses[] = 'processing';
    return $statuses;
}
  
// ----------------
// 2. Add Order Actions @ My Account
  
add_filter( 'woocommerce_my_account_my_orders_actions', 'tfc_add_edit_order_my_account_orders_actions', 50, 2 );
  
function tfc_add_edit_order_my_account_orders_actions( $actions, $order ) {
    if ( $order->has_status( 'processing' ) ) {
        $actions['edit-order'] = array(
            'url'  => wp_nonce_url( add_query_arg( array( 'order_again' => $order->get_id(), 'edit_order' => $order->get_id() ) ), 'woocommerce-order_again' ),
            'name' => __( 'ویرایش سفارش', 'woocommerce' )
        );
    }
    return $actions;
}
  
// ----------------
// 3. Detect Edit Order Action and Store in Session
  
add_action( 'woocommerce_cart_loaded_from_session', 'tfc_detect_edit_order' );
             
function tfc_detect_edit_order( $cart ) {
    if ( isset( $_GET['edit_order'] ) ) WC()->session->set( 'edit_order', absint( $_GET['edit_order'] ) );
}
  
// ----------------
// 4. Display Cart Notice re: Edited Order
  
add_action( 'woocommerce_before_cart', 'tfc_show_me_session' );
  
function tfc_show_me_session() {
    if ( ! is_cart() ) return;
    $edited = WC()->session->get('edit_order');
    if ( ! empty( $edited ) ) {
        $order = new WC_Order( $edited );
        $credit = $order->get_total();
        wc_print_notice( 'مبلغ ' . wc_price($credit) . ' به این سفارش جدید اعمال شده‌است. به راحتی می‌توانید محصولات خود را به آن اضافه کنید یا جزئیات دیگری مانند تاریخ تحویل را تغییر دهید.', 'notice' );
    }
}
  
// ----------------
// 5. Calculate New Total if Edited Order
   
add_action( 'woocommerce_cart_calculate_fees', 'tfc_use_edit_order_total', 20, 1 );
   
function tfc_use_edit_order_total( $cart ) {
    
  if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
     
  $edited = WC()->session->get('edit_order');
  if ( ! empty( $edited ) ) {
      $order = new WC_Order( $edited );
      $credit = -1 * $order->get_total();
      $cart->add_fee( 'مبلغ', $credit );
  }
    
}
  
// ----------------
// 6. Save Order Action if New Order is Placed
  
add_action( 'woocommerce_checkout_update_order_meta', 'tfc_save_edit_order' );
   
function tfc_save_edit_order( $order_id ) {
    $edited = WC()->session->get('edit_order');
    if ( ! empty( $edited ) ) {
        // update this new order
        update_post_meta( $order_id, '_edit_order', $edited );
        $neworder = new WC_Order( $order_id );
        $oldorder_edit = get_edit_post_link( $edited );
        $neworder->add_order_note( 'این سفارش نسخه ویرایش شده یک سفارش دیگر است. شماره سفارش قبلی: <a href="' . $oldorder_edit . '">' . $edited . '</a>' );
        // cancel previous order
        $oldorder = new WC_Order( $edited );
        $neworder_edit = get_edit_post_link( $order_id );
        $oldorder->update_status( 'لغو شده', 'این سفارش پس از ویرایش لغو شده است. شماره سفارش جدید: <a href="' . $neworder_edit . '">' . $order_id . '</a> -' );
    }
}

به خوبی از این کد استفاده کنید و از آن لذت ببرید.

نوشته‌های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا