Cum să creezi un feed XML de produse în WordPress WooCommerce folosind un cod PHP

YouTube Logo Urmărește canalul nostru de YouTube

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!

 

× YouTube Logo

🔔 Abonează-te la canalul nostru!

Primește cele mai noi tutoriale WordPress direct pe YouTube!

×