Dacă ai un magazin online WordPress cu WooCommerce și vrei să generezi un feed XML cu produsele tale, poți face acest lucru folosind un cod PHP personalizat. Acest feed poate fi folosit pentru a trimite datele produselor către diverse platforme de comparare a prețurilor sau reclame.
Mai jos vei găsi un cod complet pentru a genera un feed XML cu produsele WooCommerce și explicația fiecărei secțiuni:
Cod complet pentru feed-ul XML
add_action('init', function () {
add_rewrite_rule('feed/produse\.xml$', 'index.php?produse_feed=1', 'top');
add_rewrite_tag('%produse_feed%', '1');
});
add_action('template_redirect', function () {
if (get_query_var('produse_feed') === '1') {
header('Content-Type: application/xml; charset=utf-8');
$products = wc_get_products([
'status' => 'publish',
'limit' => -1,
]);
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<products>';
foreach ($products as $product) {
$product_id = $product->get_id();
$product_name = htmlspecialchars($product->get_name());
$product_url = htmlspecialchars($product->get_permalink());
$image_url = wp_get_attachment_url($product->get_image_id());
$price = wc_get_price_including_tax($product);
$currency = get_woocommerce_currency();
$availability = $product->is_in_stock() ? 'in stock' : 'out of stock';
// Obține ierarhia corectă a categoriilor
$categories = get_product_categories_hierarchy($product_id);
// Descrierea produsului
$description = htmlspecialchars($product->get_short_description() ?: $product->get_description());
echo '<product>';
echo '<manufacturer>Producator</manufacturer>';
echo '<id>' . $product_id . '</id>';
echo '<name>' . $product_name . '</name>';
echo '<description>' . $description . '</description>';
echo '<url>' . $product_url . '</url>';
echo '<image_url>' . $image_url . '</image_url>';
echo '<price>' . $price . '</price>';
echo '<currency>' . $currency . '</currency>';
echo '<availability>' . $availability . '</availability>';
echo '<category>' . $categories . '</category>';
echo '</product>';
}
echo '</products>';
exit;
}
});
function get_product_categories_hierarchy($product_id) {
$terms = get_the_terms($product_id, 'product_cat');
if (!$terms || is_wp_error($terms)) {
return '';
}
$hierarchical_categories = [];
foreach ($terms as $term) {
$ancestors = get_ancestors($term->term_id, 'product_cat');
$ancestors = array_reverse($ancestors);
$ancestor_names = [];
foreach ($ancestors as $ancestor_id) {
$ancestor = get_term($ancestor_id, 'product_cat');
$ancestor_names[] = $ancestor->name;
}
$ancestor_names[] = $term->name;
$hierarchical_categories[] = implode(' > ', $ancestor_names);
}
return implode(' | ', array_unique($hierarchical_categories));
}
Important
După adăugarea codului, trebuie să mergi în WordPress → Setări → Legături permanente și să salvezi modificările pentru ca regula să funcționeze corect. Fără acest pas, feed-ul poate să nu fie accesibil.
Explicația codului
Crearea unei reguli personalizate de rescriere a URL-ului
add_action('init', function () {
add_rewrite_rule('feed/produse\.xml$', 'index.php?produse_feed=1', 'top');
add_rewrite_tag('%produse_feed%', '1');
});
Aceasta creează o regulă de rescriere care permite accesarea feed-ului la URL-ul:
https://exemplu.com/feed/produse.xml
add_rewrite_tag()
asociază o variabilă de interogare pentru a putea verifica dacă feed-ul a fost solicitat.
Generarea feed-ului XML
add_action('template_redirect', function () {
if (get_query_var('produse_feed') === '1') {
Se verifică dacă URL-ul accesat conține ?produse_feed=1
și, dacă da, se generează feed-ul XML.
Preluarea produselor WooCommerce
$products = wc_get_products([
'status' => 'publish',
'limit' => -1,
]);
Se preiau toate produsele publicate din WooCommerce.
Modificarea câmpului „Manufacturer”
În codul inițial, producătorul era setat static:
echo '<manufacturer>Producator</manufacturer>';
Aceasta poate fi modificată pentru a prelua numele producătorului din meta datele produsului:
$manufacturer = get_post_meta($product_id, '_manufacturer', true) ?: 'Producator Necunoscut';
echo '<manufacturer>' . esc_html($manufacturer) . '</manufacturer>';
Dacă produsul nu are un producător definit, se va afișa textul „Producator Necunoscut”.
Generarea structurii XML
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<products>';
Se definește structura XML de bază.
Adăugarea detaliilor fiecărui produs
foreach ($products as $product) {
$product_id = $product->get_id();
$product_name = htmlspecialchars($product->get_name());
$product_url = htmlspecialchars($product->get_permalink());
$image_url = wp_get_attachment_url($product->get_image_id());
$price = wc_get_price_including_tax($product);
$currency = get_woocommerce_currency();
$availability = $product->is_in_stock() ? 'in stock' : 'out of stock';
Se extrag datele necesare pentru fiecare produs: ID, nume, URL, imagine, preț, monedă și disponibilitate.
Generarea ierarhiei categoriilor produsului
function get_product_categories_hierarchy($product_id) {
$terms = get_the_terms($product_id, 'product_cat');
if (!$terms || is_wp_error($terms)) {
return '';
}
Se extrage ierarhia categoriilor produsului, astfel încât să fie afișată corect în feed.
Accesarea feed-ului
După ce ai adăugat codul în WordPress (în fișierul functions.php
al temei sau într-un plugin personalizat), poți accesa feed-ul XML generat la următorul URL:
👉 https://exemplu.com/feed/produse.xml
Acesta va conține toate produsele publicate din WooCommerce.
Concluzie
Acest tutorial îți arată cum să generezi un feed XML de produse WooCommerce folosind un cod PHP personalizat. Feed-ul poate fi folosit pentru integrarea cu diverse platforme de vânzare și marketing. Dacă ai întrebări sau ai nevoie de ajustări, lasă un comentariu!