Jak zrobić własny status zamówienia w Woocommerce
Chociaż WooCommerce zawiera kilka różnych stanów zamówień, mogą one nie pasować do przepływu informacji w Twoim sklepie. Dzięki wbudowanym funkcjom WooCommerce możesz oznaczać zamówienia jednym z następujących statusów:
- Zakończony
- Przetwarzanie
- Oczekuje na płatność
- W oczekiwaniu
- Zwrócono środki
- Anulowany
- Nie powiodło się
Jednak niektóre sklepy potrzebują więcej stanów zamówień, takich jak “Oczekiwanie na dostawę”, “Faktura do pobrania” lub inne, aby spełnić ich wymagania dotyczące zakończenia sprzedaży. Możesz łatwo dodać je samemu z niewielką ilością niestandardowego kodu.
Zobaczmy, jak dodać status zamówienia niestandardowego WooCommerce i usunąć status zamówienia.
Dodawanie statusu zamówienia niestandardowego WooCommerce
W WooCommerce 2.1 lub wcześniejszym statusy zamówień były przechowywane jako systematyka dla typu wpisu “Zamówienie”. Taksonomie WordPress są kategoryzacjami, takimi jak kategorie postów i tagi. Jednak WooCommerce 2.2 wymagało zmiany struktury zamówień w celu obsługi częściowych i automatycznych zwrotów od administratora WooCommerce. Statusy zamówień są teraz zapisywane jako niestandardowy status posta , podobnie jak wersja robocza , zaplanowana lub opublikowana dla postów.
Dodanie niestandardowego statusu postu wymaga teraz nieco więcej kodu niż w przypadku WooCommerce 2.1, ale jest to z perspektywy programistycznej nieco prostsze (nie trzeba uruchamiać kodu, a następnie go usunąć). Pamiętaj, aby poprawnie dodać ten kod do swojej witryny – Zalecam utworzenie wtyczki lub skorzystanie z wtyczki Code Snippets.
Zacznijmy od pełnego fragmentu dla niecierpliwych ludzi. Spowoduje to dodanie statusu zamówienia “Oczekuje na dostawę” do Twojego sklepu. Rozwiążę to, aby wyjaśnić, co robi każda część tego fragmentu.
/** * Zarejestruj nowy status zamówienia * Tutorial: https://www.wphp.pl **/ function dostawa_status() { register_post_status( 'wc-dostawa', array( 'label' => 'Oczekuje na dostawę', 'public' => true, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Oczekuje na dostawę <span class="count">(%s)</span>', 'Oczekuje na dostawę <span class="count">(%s)</span>' ) ) ); } add_action( 'init', 'dostawa_status' ); // Dodanie do listy statusów zamówień (wc_order_statuses) function dodaj_dostawa_status( $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-dostawa'] = 'Oczekuje na dostawę'; } } return $new_order_statuses; } add_filter( 'wc_order_statuses', 'dodaj_dostawa_status' );
Na koniec mały dodatek dla estetów, którzy chcieliby do nowego statusu zamówienia dołączyć własną ikonkę.
add_action('admin_head', 'backorder_font_icon'); function backorder_font_icon() { echo '<style> .widefat .column-order_status mark.dostawa:after{ font-family:WooCommerce; speak:none; font-weight:400; font-variant:normal; text-transform:none; line-height:1; -webkit-font-smoothing:antialiased; margin:0; text-indent:0; position:absolute; top:0; left:0; width:100%; height:100%; text-align:center; content:"\e019"; color:#000000; } </style>'; }
sellwithwp.com/woocommerce-custom-order-status-2/
function register_shipment_arrival_order_status() {
register_post_status( 'wc-dostawa', array(
'label' => 'Czeka na dostawę towaru',
'public' => true,
'show_in_admin_status_list' => true,
'show_in_admin_all_list' => true,
'exclude_from_search' => false,
'label_count' => _n_noop( 'Czeka na dostawę <span class="count">(%s)</span>', 'Czeka na dostawę <span class="count">(%s)</span>' )
) );
}
add_action( 'init', 'register_shipment_arrival_order_status' );
function add_awaiting_shipment_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-dostawa'] = 'Czeka na dostawę towaru';
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_awaiting_shipment_to_order_statuses' );
Jeśli jeszcze chcemy zmienić kolejność w submenu nad listą zamówień to taki kod:
function woocommerce_custom_order_views( $views ) {
$widok = array_slice($views, 0, 2);
$dostawa = array_slice($views,-1,1);
$reszta = array_slice($views, 2);
unset( $views['wc-dostawa'] );
$views = $widok + $dostawa + $reszta;
// all, wc-processing, wc-on-hold, wc-completed, wc-cancelled, wc-refunded, wc-failed, wc-dostawa
return $views;
}
add_filter( 'views_edit-shop_order', 'woocommerce_custom_order_views' );