همه سفارشات ووکامرس براساس روش پرداخت و نوع محصول، وضعیتهای از پیش تعریفشدهای نظیر «در حال پردازش» ، «تکمیل شده» و «لغو شده» دارند. گاهی اوقات این وضعیتها کافی نیستند و نیاز است وضعیت یا وضعیتهای دلخواه جدیدی را به ووکامرس اضافه کنید. در این نوشته قرار است به شما نحوه تنظیم وضعیت سفارشی برای سفارشات جدید در ووکامرس را آموزش دهیم.
آنچه در این مقاله میخوانید
تنظیم وضعیت دلخواه برای سفارشات جدید در ووکامرس
اگر میخواهید بدون نصب افزونه و با استفاده از کد PHP یک وضعیت دلخواه به سفارشات ووکامرس اضافه کنید، کافی است مراحل زیر را دنبال کنید.
۱- ایجاد وضعیت سفارشی جدید در ووکامرس
قطعه کد زیر به شما کمک خواهد کرد تا یک وضعیت سفارشی جدید به ووکامرس اضافه کنید. نام وضعیت سفارشی تعریف شده در اینجا، Custom Status بوده که میتوانید آن را تغییر دهید.
/**
* @snippet Register Order Status
* @author Rodolfo Melogli
* @compatible WooCommerce 3.5.4
*/
add_filter( 'woocommerce_register_shop_order_post_statuses', 'tidaweb_register_custom_order_status' );
function tidaweb_register_custom_order_status( $order_statuses )
{
// Status must start with "wc-"
$order_statuses['wc-custom-status'] = array(
'label' => _x( 'Custom Status', 'Order status', 'woocommerce' ),
'public' => false,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Custom Status <span class="count">(%s)</span>', 'Custom Status <span class="count">(%s)</span>', 'woocommerce' ),
);
return $order_statuses;
}
۲- نمایش وضعیت تعریف شده در جزئیات سفارش، لیست سفارشات و لیست کارهای گروهی
در این مرحله میبایست وضعیت جدید را در جزئیات سفارش، لیست سفارشات و هر آنجایی که وضعیتهای دیگر وجود دارند، نمایش دهید تا مدیر فروشگاه بتواند به راحتی وضعیت سفارش را به وضعیت جدید تعریف شده تغییر دهد.
/**
* @snippet Show Order Status in the Dropdown @ Single Order and "Bulk Actions" @ Orders
* @author Rodolfo Melogli
* @compatible WooCommerce 3.5.4
*/
add_filter( 'wc_order_statuses', 'tidaweb_show_custom_order_status' );
function tidaweb_show_custom_order_status( $order_statuses )
{
$order_statuses['wc-custom-status'] = _x( 'Custom Status', 'Order status', 'woocommerce' );
return $order_statuses;
}
add_filter( 'bulk_actions-edit-shop_order', 'tidaweb_get_custom_order_status_bulk' );
function tidaweb_get_custom_order_status_bulk( $bulk_actions )
{
// Note: "mark_" must be there instead of "wc"
$bulk_actions['mark_custom-status'] = 'Change status to custom status';
return $bulk_actions;
}
۳- تنظیم وضعیت تعریفشده پس از نهایی شدن سفارش
در صورتی که میخواهید به محض اینکه سفارش نهایی شد، وضعیت سفارش به وضعیتی که تعریف کردهاید، تغییر کند قطعه کد زیر این کار را برای شما انجام خواهد داد.
/**
* @snippet Set Custom Order Status @ WooCommerce Checkout Process
* @author Rodolfo Melogli
* @compatible WooCommerce 3.5.4
*/
add_action( 'woocommerce_thankyou', 'tidaweb_thankyou_change_order_status' );
function tidaweb_thankyou_change_order_status( $order_id )
{
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
// Status without the "wc-" prefix
$order->update_status( 'custom-status' );
}
در انتها برای راحتی کار شما، همه کدهای بالا را در قالب یک کد آماده کردیم تا به راحتی بتوانید آن را به پوسته خود اضافه نمایید.
/**
* @snippet Set Custom Order Status during Checkout
* @author Rodolfo Melogli
* @compatible WooCommerce 3.5.4
*/
// ---------------------
// ۱. Register Order Status
add_filter( 'woocommerce_register_shop_order_post_statuses', 'tidaweb_register_custom_order_status' );
function tidaweb_register_custom_order_status( $order_statuses )
{
// Status must start with "wc-"
$order_statuses['wc-custom-status'] = array(
'label' => _x( 'Custom Status', 'Order status', 'woocommerce' ),
'public' => false,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Custom Status <span class="count">(%s)</span>', 'Custom Status <span class="count">(%s)</span>', 'woocommerce' ),
);
return $order_statuses;
}
// ---------------------
// ۲. Show Order Status in the Dropdown @ Single Order and "Bulk Actions" @ Orders
add_filter( 'wc_order_statuses', 'tidaweb_show_custom_order_status' );
function tidaweb_show_custom_order_status( $order_statuses )
{
$order_statuses['wc-custom-status'] = _x( 'Custom Status', 'Order status', 'woocommerce' );
return $order_statuses;
}
add_filter( 'bulk_actions-edit-shop_order', 'tidaweb_get_custom_order_status_bulk' );
function tidaweb_get_custom_order_status_bulk( $bulk_actions )
{
// Note: "mark_" must be there instead of "wc"
$bulk_actions['mark_custom-status'] = 'Change status to custom status';
return $bulk_actions;
}
// ---------------------
// ۳. Set Custom Order Status @ WooCommerce Checkout Process
add_action( 'woocommerce_thankyou', 'tidaweb_thankyou_change_order_status' );
function tidaweb_thankyou_change_order_status( $order_id )
{
if( ! $order_id ) return;
$order = wc_get_order( $order_id );
// Status without the "wc-" prefix
$order->update_status( 'custom-status' );
}
در این نوشته یاد گرفتیم که چگونه میتوان یک وضعیت سفارشی جدید به ووکامرس اضافه نمود و همچنین ووکامرس را طوری تنظیم کرد که پس از نهایی شدن سفارش، وضعیت سفارش را به وضعیت تعریف شده تغییر کند. در صورتی که سؤالی دارید میتوانید آن را با ما در میان بگذارید. همچنین اگر به دنبال ترفندهای بیشتر هستید، به ترفند وردپرس مراجعه کنید.
منبع : Business Bloomer
سلام
من میخوام سفارش مشتری بدون پرداخت برام ارسال بشه اما سفارش ارسال نمیشه چون پرداخت نشده.
چیکار باید بکنم؟
ممنون
باسلام
شما میتونین یک روش پرداخت به نام “بعداً پرداخت میکنم” را فعال کنین تا سفارش به صورت در حال انجام قرار بگیره و بتونه براتون ایمیل بفرسته . با این کار سفارش کاربر به طور کامل ثبت میشه و وارد درگاه بانکی نمیشه تا پرداختی انجام بده.
باتشکر
سلام وقت بخیر
برای تغییر نام وضعیت، هرجا عبارت custom status هست را به نام دلخواه تغییر دهیم؟
یا خیر بعضی جاها لازمه به زبان لاتین باشه
ممنونم
سلام دوست عزیز
بله هر جایی که custom-status داره به اسم خودتون رو تغییر بدید فقط اگر قبلش wc- داره اون باید سر جای خودش بمونه.
موفق و پیروز باشید
خب این کد هایی که لطف کردید نوشتید و بگید باید کجا بارگذاری کنیم 🙂
سلام دوست عزیز
شما این کدها رو باید در افزونه اختصاصی خود یا در فایل functions.php پوسته تون باید بارگذاری کنید.
باتشکر
وقتتون بخیر باشه
من نمیخوام وضعیت سفارش جدیدی تعریف کنم. فقط میخوام بعد از اینکه مشتری سفارش رو پرداخت کرد، بجای اینکه وضعیت سفارش در حال انجام ثبت بشه. سفارش با وضعیت در حال بررسی ثبت بشه و بعد خودم به صورت دستی بزارمش رو حالت در حال انجام. برای اینکار از چه کدی باید استفاده کنم؟
ممنون میشم اگر پاسخ بدید.
سلام علی عزیز
به صورت پیش فرض، ووکامرس براساس درگاه پرداخت وضعیت را تغییر میده ولی اگر تمایل داری به صورت اجباری پس از ثبت هر سفارش در وضعیت «در انتظار بررسی» قرار گیرد باید از کد زیر استفاده کنی.
add_action( 'woocommerce_thankyou', 'change_order_status_on_payment_complete' , 10, 1 );
function change_order_status_on_payment_complete( $order_id )
{
$order = wc_get_order( $order_id );
if( !empty( $order ) ) $order->update_status( 'on-hold' );
}
وقت بخیر. من از این کد استفاده کردم. بعد از ثبت سفارش ابتدا سفارش در وضعیت در خال انجام قرار میگیره و بلافاصله به وضعیت در حال بررسی تغییر وضعیت میده. من میخوام جوری باشه که از ابتدا بعد از پرداخت با وضعیت در حال بررسی ثبت بشه. راه حلی داره ؟
سلام مجدد
دوست عزیز این موضوع توسط درگاههای پرداخت هندل میشه، برخی از درگاهها فیلدی را تحت عنوان وضعیت پس از پرداخت تعریف کردند که شما میتونین از اونجا تنظیمش کنین. وگرنه به صورت پیش فرض بیشتر درگاهها خودشون تنظیم کردن که پس از پرداخت موفق، وضعیت به در حال انجام تغییر پیدا کنه. الان اگر شما از پرداخت مستقیم یا پرداخت با کارت بانکی رو فعال کنین، می بینین که پس از ثبت سفارش، سفارش در وضعیت در انتظار بررسی قرار میگیره.
باتشکر
موفق و پیروز باشید
ممنون از راهنمایی خوبتون. سپس فراوان