WordPress

WooCommerce — podziel wiele elementów na pojedyncze elementy

  • 30 maja, 2018
  • 7 min read
WooCommerce — podziel wiele elementów na pojedyncze elementy


$przedmiot ) { $nowe_przedmioty[ $key ] = $przedmiot; // Wstaw nową pozycję menu przed pozycją „panel kontrolny” if ( $key === 'orders’ ) { $new_items[’split-orders’] = „Zamówienia 2”; } } return $new_items; } add_filter( 'woocommerce_account_menu_items’, 'add_split_orders_table_menu_item’ ); /////// Koniec kodu Mneu Tutaj //dodanie funkcjonalności podziału kolejności pokazanej w wp-admin Funkcja tabeli zamówień action_woocommerce_checkout_order_processed( $order_id, $posted_data, $order ) { // Tablica do przechowywania podzielonych zamówień $split_orders = array() ; // Pobierz wszystkie elementy w kolejności $order_items = $order->get_items(); // Flagi sprawdzające, czy znaleziono jakiś produkt z kategorii 494 i innych $products_in_category_494 = false; $products_in_other_categories = false; // Utwórz nowe zamówienie podzielone tylko wtedy, gdy istnieją produkty zarówno z kategorii 494, jak i innych kategorii $split_order_needed = false; // Iteruj pozycje zamówienia foreach ( $order_items as $item_id => $item ) { // Pobieranie obiektu WC_Product $product = $item->get_product(); // Pobierz kategorie produktu $product_categories = $product->get_category_ids(); // Sprawdź, czy produkt należy do określonej kategorii (ID kategorii: 494) if (in_array(’494′, $product_categories)) { // Ustaw flagę na true $products_in_category_494 = true; } else { // Ustaw flagę dla innych kategorii $products_in_other_categories = true; } } // Sprawdź, czy znaleziono oba typy produktów if ($products_in_category_494 && $products_in_other_categories) { $split_order_needed = true; } // Jeśli potrzebny jest podział zamówienia, przejdź do podziału zamówienia if ( $split_order_needed ) { // Utwórz nowe zamówienie podzielone $split_order = wc_create_order(); // Iteruj pozycje zamówienia foreach ( $order_items as $item_id => $item ) { // Pobieranie obiektu WC_Product $product = $item->get_product(); // Pobierz kategorie produktu $product_categories = $product->get_category_ids(); // Sprawdź, czy produkt należy do określonej kategorii (ID kategorii: 494) if (in_array(’494′, $product_categories)) { // Dodaj produkt do podzielonego zamówienia $split_order->add_product( $product, $item- >get_ilość() ); // Usuń produkt z pierwotnego zamówienia $order->remove_item( $item_id ); } } $split_order->set_address( array( 'first_name’ => $order->get_billing_first_name(), 'last_name’ => $order->get_billing_last_name(), ’email’ => $order->get_billing_email(), ’ telefon’ => $zamówienie->get_billing_phone(), 'address_1′ => $zamówienie->get_billing_address_1(), 'address_2′ => $zamówienie->get_billing_address_2(), 'miasto’ => $zamówienie->get_billing_city() , 'state’ => $order->get_billing_state(), 'postcode’ => $order->get_billing_postcode(), 'country’ => $order->get_billing_country() ), 'billing’ ); $split_order->set_address( array( 'first_name’ => $order->get_shipping_first_name(), 'last_name’ => $order->get_shipping_last_name(), 'address_1′ => $order->get_shipping_address_1(), 'adres_2′ => $zamówienie->get_shipping_address_2(), 'miasto’ => $zamówienie->get_shipping_city(), 'state’ => $zamówienie->get_shipping_state(), 'kod pocztowy’ => $zamówienie->get_shipping_postcode(), ’ kraj’ => $zamówienie->get_shipping_country() ), 'wysyłka’ ); // Ustaw poprawną walutę i bramkę płatniczą $split_order->set_currency( $order->get_currency() ); $split_order->set_payment_method( $order->get_payment_method() ); // Oblicz sumy $split_order->calculate_totals(); // Ustaw notatkę zamówienia z oryginalnym identyfikatorem $split_order->add_order_note( 'Zamówienie automatyczne. Utworzono z oryginalnego identyfikatora zamówienia: ’ . $order_id ); $split_order->update_status( 'przetwarzanie’ ); // Dodaj zlecenie podziału do tablicy zleceń podziału $split_orders[] = $podział_zamówienia; } // Oblicz ponownie i zapisz oryginalne zamówienie $order->calculate_totals(); $zamówienie->zapisz(); // Przechowuj dane podzielonego zamówienia w kolejności meta update_post_meta( $order_id, 'split_orders’, $split_orders ); } add_action( 'woocommerce_checkout_order_processed’, 'action_woocommerce_checkout_order_processed’, 10, 3 ); //wyświetl tabelę podziału zamówień na stronie z podziękowaniami funkcja panelu użytkownika display_split_orders( $order_id ) { // Uzyskaj podzielone zamówienia z meta zamówienia $split_orders = get_post_meta( $order_id, 'split_orders’, true ); // Sprawdź, czy istnieją zamówienia podzielone if ( ! pusty( $split_orders ) ) { echo ”; Echo ’

Warto przeczytać!  Wybierz listę rozwijaną ze zdarzeniem onChange i funkcją wyszukiwania — za pomocą Selectize

Zamówienia 2 Szczegóły

’; // Pętla przeglądaj podzielone zamówienia foreach ( $split_orders as $split_order ) { echo ”; Echo ”; Echo ”; echo 'Podziel identyfikator zamówienia: ’ . $split_order->get_id() . ”; echo „Produkt”; echo „Razem”; Echo ”; Echo ”; Echo ”; // Pętla przeglądaj elementy w kolejności podzielonej foreach ( $split_order->get_items() as $item_id => $item ) { $product = $item->get_product(); Echo ”; echo 'get_permalink() . '”>’ . $product->get_name() . ’ × ’ . $item->get_quantity() . ”; echo ” . wc_price( $item->get_total() ). ”; echo ”; } echo ”; echo ”; echo 'Suma częściowa:’ . wc_price( $split_order->get_subtotal() ) ”; echo 'Suma:’ ”; echo ”; } echo ” } jeszcze { // echo ’

Nie znaleziono zamówień podzielonych.

’; } } add_action( 'woocommerce_thankyou’, 'display_split_orders’ ); funkcja display_split_orders_content_in_table() { global $wp; // Sprawdź, czy bieżący adres URL zawiera punkt końcowy podziału zamówień if ( isset( $wp->query_vars[’split-orders’] ) ) { // Uzyskaj bieżący identyfikator użytkownika $user_id = get_current_user_id(); // Ustaw parametry paginacji $orders_per_page = -1; $paged = ( get_query_var( 'stronicowany’ ))? get_query_var( 'stronicowany’ ): 1; $offset = ( $paged – 1 ) * $orders_per_page; // Pobierz zamówienia dla bieżącego użytkownika z paginacją $customer_orders = wc_get_orders( array( 'customer’ => $user_id, 'post_status’ => array( 'wc-processing’, 'wc-completed’ ), 'limit’ => $orders_per_page, 'offset’ => $offset, ) ); if ( $customer_orders ) { // Wyświetl podzielone zamówienia w tabeli echo ”; Echo ”; echo 'OrderDateStatusTotalActions’; Echo ”; foreach ( $customer_orders as $order ) { // Uzyskaj dane dotyczące zamówień podzielonych z meta zamówienia $split_orders = get_post_meta( $order->get_id(), 'split_orders’, true ); // Sprawdź, czy istnieją podzielone zamówienia if ( ! pusty( $split_orders ) ) { foreach ( $split_orders as $split_order ) { // Uzyskaj identyfikator podzielonego zamówienia $split_order_id = $split_order->get_id(); // Pobieranie danych o podzielonym zamówieniu $split_order_data = $split_order->get_data(); Echo ”; Echo '#’. $split_id_zamówienia .”; Echo ” . $order->get_date_created()->date_i18n( get_option( 'date_format’ ) ) . ”; Echo ” . wc_get_order_status_name( $split_order->get_status() ) . ”; Echo ” . wc_price($split_order_data[’total’] ). Do ’. $split_order->get_item_count() .’ rzeczy’; echo 'Widok’; Echo ”; } } } Echo ”; Echo ”; Echo ”; // Dodaj paginację $total_orders = count( $customer_orders ); $total_pages = ceil($total_orders / $orders_per_page ); echo paginate_links( array( 'total’ => $total_pages, 'current’ => $paged, ) ); } jeszcze { // echo ’

Warto przeczytać!  8 najlepszych narzędzi do optymalizacji treści online dla WordPress (w 2023 r.)

Nie znaleziono zamówień dla bieżącego użytkownika.

’; } } } add_action( 'woocommerce_account_split-orders_endpoint’, 'display_split_orders_content_in_table’ ); // Obsługa żądań do punktu końcowego kolejności podziału, funkcja użytkownika display_split_order_content() { global $wp; $bieżący_url = home_url( $wp->żądanie); $url_parts = parse_url( $bieżący_url ); if ( isset( $url_parts[’path’] ) && strpos( $url_parts[’path’]’podzielone zamówienie/’ ) !== false ) { // Wyodrębnij identyfikator zamówienia z adresu URL $path_parts = eksploduj( ” $url_parts[’path’] ); $id_zamówienia = koniec($części_ścieżki); $split_order_id = absint( $id_zamówienia); // Pobierz obiekt podziału zamówienia $split_order = wc_get_order( $split_order_id ); if ( $split_order &&! is_wp_error( $split_order ) ) { // Wyświetl szczegóły podzielonego zamówienia echo ’

Zamówienie #’. $split_order->get_id() .’ został umieszczony na ’.$split_order->get_date_created()->date_i18n( get_option( 'date_format’ ) ).’ i obecnie ma postać „.wc_get_order_status_name( $split_order->get_status() ) .”.

’; Echo ”; Echo ’

Zamówienie 2 Szczegóły:

’; Echo ”; Echo ”; Echo ”; echo 'Podziel identyfikator zamówienia: ’ . $split_order->get_id() . ”; echo „Produkt”; echo „Razem”; ”; ”; Echo ”; foreach ( $split_order->get_items() as $item_id => $item ) { echo ”; Echo ”; echo 'get_product()->get_permalink() . '”>’ . $item->get_name() . ”; echo ’ × ’ . $item->get_quantity() . ”; echo ”; echo ”; echo ” . wc_price( $item-> get_total() ) ”; echo ”; echo ”; echo ”; echo ”; echo 'Suma częściowa:’; echo ” . ”; ”; // Dodaj szczegóły adresu rozliczeniowego echo ”; echo 'Adres rozliczeniowy:’; echo $split_order->get_formatted_billing_address(); // Wyświetl sformatowany adres rozliczeniowy echo ”; echo ”; echo 'Ogółem:’; echo ” .wc_price( $split_order->get_total() ) . echo ”; echo ”;

Warto przeczytać!  php - Word Press - JSPDF - Wysyłanie PDF jako załącznik z wp_mail - Znaki specjalne

Nie znaleziono podzielonego zamówienia.

’; } } } add_action( 'woocommerce_account_split-order_endpoint’, 'display_split_order_content’ );


Źródło