Dacă ai un magazin WooCommerce cu produse provenind din mai multe depozite și dorești să organizezi și să gestionezi comenzile mai eficient, acest articol îți va arăta cum să adaugi câmpuri personalizate pentru depozite, să salvezi aceste informații și să le afișezi în administrarea comenzilor. În plus, vei învăța cum să trimiti notificări automate către furnizori atunci când un produs din depozitul lor este comandat.
Ce face acest cod?
Codul pe care îl vei găsi mai jos face următoarele:
- Adaugă un câmp personalizat în pagina de editare a produselor din WooCommerce, care permite selectarea unui depozit pentru fiecare produs (de exemplu, „Furnizor 1” și „Furnizor 2”).
- Salvează informațiile selectate (depozitul ales) atunci când produsul este salvat.
- Adaugă o coloană personalizată în lista de comenzi, care afișează depozitul asociat fiecărui produs din comandă.
- Trimite un e-mail automat către furnizorul asociat cu produsele din depozitul său atunci când o comandă este finalizată.
Codul complet:
<?php
// Adaugă câmpul de selecție a depozitului în pagina de editare a produsului
function add_warehouse_field() {
global $post;
// Numele câmpului și valoarea sa
$warehouse = get_post_meta($post->ID, '_product_warehouse', true);
echo '<div class="options_group">';
woocommerce_wp_select(
array(
'id' => '_product_warehouse',
'label' => __('Depozit', 'woocommerce'),
'options' => array(
'furnizor1' => __('Furnizor 1', 'woocommerce'),
'furnizor2' => __('Furnizor 2', 'woocommerce')
),
'value' => $warehouse
)
);
echo '</div>';
}
add_action('woocommerce_product_options_general_product_data', 'add_warehouse_field');
// Salvează valoarea câmpului personalizat
function save_warehouse_field($post_id) {
$warehouse = $_POST['_product_warehouse'];
if (!empty($warehouse)) {
update_post_meta($post_id, '_product_warehouse', esc_attr($warehouse));
}
}
add_action('woocommerce_process_product_meta', 'save_warehouse_field');
// Adaugă o coloană pentru depozit în administrarea comenzilor
function add_order_warehouse_column($columns) {
$new_columns = array();
foreach ($columns as $key => $column) {
$new_columns[$key] = $column;
if ('order_number' === $key) {
$new_columns['order_warehouse'] = __('Depozit', 'woocommerce');
}
}
return $new_columns;
}
add_filter('manage_edit-shop_order_columns', 'add_order_warehouse_column');
// Populează coloana de depozit cu datele corespunzătoare
function display_order_warehouse_column($column) {
global $post, $woocommerce, $the_order;
if ('order_warehouse' === $column) {
$items = $the_order->get_items();
$warehouses = array('furnizor1' => 0, 'furnizor2' => 0);
foreach ($items as $item) {
$product_id = $item->get_product_id();
$warehouse = get_post_meta($product_id, '_product_warehouse', true);
if ($warehouse) {
$warehouses[$warehouse]++;
}
}
$warehouse_names = array();
foreach ($warehouses as $warehouse => $count) {
if ($count > 0) {
$warehouse_names[] = ucfirst($warehouse);
}
}
echo implode(', ', $warehouse_names);
}
}
add_action('manage_shop_order_posts_custom_column', 'display_order_warehouse_column');
// Trimite email automat către Furnizor 1 pentru produsele din depozitul său
function notify_furnizor1_about_order($order_id) {
// Obține comanda
$order = wc_get_order($order_id);
// Inițializează un array pentru a colecta SKU-urile produselor din depozitul Furnizor 1
$furnizor1_skus = array();
// Parcurge produsele din comandă
foreach ($order->get_items() as $item_id => $item) {
$product_id = $item->get_product_id();
$warehouse = get_post_meta($product_id, '_product_warehouse', true);
// Dacă produsul este în depozitul Furnizor 1, adaugă SKU-ul la array
if ($warehouse === 'furnizor1') {
$product = wc_get_product($product_id);
$furnizor1_skus[] = $product->get_sku();
}
}
// Dacă există produse din depozitul Furnizor 1, trimite emailul
if (!empty($furnizor1_skus)) {
$to = array('furnizor1@exemplu.ro'); // Adresa de e-mail a Furnizorului 1
$subject = 'Comanda de produse';
$headers = array('Content-Type: text/html; charset=UTF-8');
$message = 'Salut Furnizor 1,<br><br>
Te rog să imi trimiți 1 bucată din produsul cu codul SKU: ' . implode(', ', $furnizor1_skus) . '.<br><br>
Te rog să îmi confirmi când ai expediat comanda.<br><br>
Mulțumesc.';
wp_mail($to, $subject, $message, $headers);
}
}
add_action('woocommerce_thankyou', 'notify_furnizor1_about_order');
Explicație detaliată a codului
- Adăugarea Câmpului de Depozit în Pagina de Editare a Produsului:
- Funcția
add_warehouse_field
adaugă un câmp personalizat în pagina de editare a produselor din WooCommerce. Acest câmp permite selectarea unui depozit dintr-o listă derulantă cu opțiunile „Furnizor 1” și „Furnizor 2”. - Acest câmp va fi folosit pentru a asigna depozitul corespunzător fiecărui produs.
- Funcția
- Salvarea Valorii Câmpului Personalizat:
- Funcția
save_warehouse_field
se asigură că valoarea câmpului de depozit (selectată de utilizator în pagina de editare a produsului) este salvată corect în baza de date. - Această funcție se execută atunci când produsul este salvat.
- Funcția
- Adăugarea Coloanei pentru Depozit în Administrarea Comenzilor:
- Funcția
add_order_warehouse_column
adaugă o coloană personalizată în lista de comenzi din admin, care va afișa depozitul asociat fiecărui produs din comandă. - Aceasta ajută la vizualizarea rapidă a depozitului pentru fiecare produs dintr-o comandă.
- Funcția
- Popularea Coloanei de Depozit cu Datele Corespunzătoare:
- Funcția
display_order_warehouse_column
va popula coloana „Depozit” cu datele corespunzătoare pentru fiecare comandă. Ea parcurge produsele din comandă și afișează depozitul fiecărui produs.
- Funcția
- Trimiterea unui E-mail Automat către Furnizorul Corespunzător:
- Funcția
notify_furnizor1_about_order
trimite un e-mail automat către furnizorul corespunzător (de exemplu, „Furnizor 1”) când o comandă care conține produse din depozitul acestuia este plasată. - E-mailul conține SKU-urile produselor din depozitul respectiv și o cerere pentru a comanda produsele necesare.
- Funcția
Cum să utilizezi acest cod
- Adăugarea Câmpului în WooCommerce: După ce adaugi acest cod în fișierul
functions.php
al temei tale, vei putea selecta depozitul pentru fiecare produs din pagina de editare a produsului. - Vizualizarea Depozitelor în Admin: Coloana „Depozit” va apărea automat în lista de comenzi, unde vei putea vedea rapid care depozit a fost asociat fiecărui produs din comandă.
- Notificări Automate: Când o comandă este plasată cu produse din depozitul „Furnizor 1”, va fi trimis un e-mail automat către furnizorul respectiv.
Concluzie
Acest cod personalizat pentru WooCommerce te ajută să adaugi depozite pentru produse, să vizualizezi aceste informații în administrarea comenzilor și să trimiți notificări automate furnizorilor atunci când produsele lor sunt comandate. Astfel, îți vei organiza mai ușor produsele și comenzile, iar furnizorii vor fi informați rapid despre produsele pe care trebuie să le comande.