איך להעביר הזמנות לסטטוס הושלם אוטומטי בווקומרס -WooCommerce
תוכן עניינים
אם אתם מעוניינים לחסוך זמן יקר ולייעל את תהליך ניהול ההזמנות באתר שלכם, ייתכן שתרצו שהזמנות ששולמו יסומנו אוטומטית כ”הושלם” – מבלי שתצטרכו להיכנס לממשק הניהול ולעבור ידנית על כל הזמנה.
בדרך כלל, לאחר תשלום מוצלח, ההזמנה עוברת לסטטוס “בטיפול”, ולאחר מכן יש לעדכן אותה ל”הושלם” באופן ידני (או באמצעות אוטומציה נוספת). הקוד הבא מדלג על שלב “בטיפול” ומעדכן את ההזמנה ישירות ל”הושלם” ברגע שהתשלום הושלם בהצלחה.
חשוב לדעת: חלק מתוספי הסליקה מאפשרים להגדיר את סטטוס ההזמנה לאחר תשלום מוצלח – כך שתוכלו להגדיר שם שההזמנה תסומן אוטומטית כ”הושלם” ללא צורך בקוד כלל.
הקוד הזה שימושי במיוחד באתרים שבהם אין צורך במשלוח פיזי של מוצרים (כמו הורדות דיגיטליות, קורסים מקוונים, תרומות ועוד), ולכן ניתן לעקוף את שלב בטיפול.
שינוי ססטוס הושלם לכל סוגי ההזמנות
add_action( 'woocommerce_payment_complete', 'auto_complete_paid_orders' );
function auto_complete_paid_orders( $order_id ) {
if ( ! $order_id ) return;
$order = wc_get_order( $order_id );
$order->update_status( 'completed' );
}
שינוי ססטוס הושלם אם המוצרים וירטואליים
מעביר לססטוס הושלם רק אם לכל המוצרים בסל לא נדרש משלוח
add_action( 'woocommerce_payment_complete', 'auto_complete_digital_orders_only' );
function auto_complete_digital_orders_only( $order_id ) {
if ( ! $order_id ) return;
$order = wc_get_order( $order_id );
$digital_only = true;
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
if ( $product && $product->needs_shipping() ) {
$digital_only = false;
break;
}
}
if ( $digital_only ) {
$order->update_status( 'completed' );
}
}
שינוי ססטוס הושלם אם המוצרים מקטגוריית מוצרים מסויימת
הנה גרסה של הקוד שמסיימת אוטומטית רק הזמנות שכל המוצרים בהן שייכים לקטגוריה מסוימת
שימו לב בשורה 6 להחליף ל־slug של הקטגוריה הרצויה (לא השם הגלוי אלא מזהה ה־URL)
add_action( 'woocommerce_payment_complete', 'auto_complete_orders_by_category' );
function auto_complete_orders_by_category( $order_id ) {
if ( ! $order_id ) return;
$order = wc_get_order( $order_id );
$target_category = 'slug'; // Here you will enter the slug of the desired category
$all_products_in_category = true;
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
if ( ! $product || ! has_term( $target_category, 'product_cat', $product->get_id() ) ) {
$all_products_in_category = false;
break;
}
}
if ( $all_products_in_category ) {
$order->update_status( 'completed' );
}
}