Ako prekonvertovať taxonómiu na atribút produktu

Plugin Woocommerce pridáva do WordPress-u okrem vlastných typov obsahu ako sú produkty aj vlastné taxonómie, napr. kategórie produktov či značky produktov. 

Práve druhá menovaná taxonómia má podľa mojho názoru nešťastný preklad z angličtiny, keďže sa jedná o tzv. product tags vo význame skôr štítkov ako značiek. A tu sa stretávam s častým problémom, že používatelia WordPress-u si to mýlia so značkami vo význame výrobcov, čo však nie je správne, keďže výrobca predstavuje atribút produktu. Z technického hľadiska však nejde o chybu, avšak z obsahového áno. Existujú pluginy, ktoré vedia previest hodnty jednej taxonómie do druhej, resp. da sa to pomerne jednoducho upraviť aj priamo v databáze, avšak v prípade produktových atribútov, je to o nieco komplikovanejšie. Rozhodol som sa preto napísať si vlastnú funkciu, pomocou ktorej prekonvertujem všetky produktové značky na vlastnosť produktu Výrobca pre všetky produkty.

Prvým krokom je vytvoriť nový atribút produktu s názvom Výrobca, čím vytvoríme taxonómiu pa_vyrobca. Následne môžeme pristúpiť k našej funkcii. Získame všetky produkty pomocou funkcie get_posts a pre každý produkty zistíme jeho hodnoty produktových značiek (get_the_terms()). Prejdem si tieto hodnoty cez foreach a uložím si ich názvy do samostatného poľa „manufacturer“. Ďalej získam meta hodnotu obsahujúcu údaje o produktových atribútoch daného prodktu a pri k nim náš nový atribút výrobca. Následne len aktualizujem novú meta hodnotu.

				
					function px_convert_tax_to_attribute()
{
    //ziskame vsetky produkty
    $posts = get_posts([
        'fields' => 'ids',
        'post_type' => 'product',
        'post_status' => 'any', //alebo len "publish"
        'posts_per_page' => -1,
    ]);

    if (!empty($posts)) {

        foreach ($posts as $post_id) {

            $manufacturers = [];
            
            //ziskame produktove znacky pre konkretny produkt
            $product_tags = get_the_terms($post_id, 'product_tag');
            
            //ulozime si do pola nazov znacky
            foreach ($product_tags as $product_tag) {
                $manufacturers[] = $product_tag->name;
            }
            
            //nastavitme novu taxonomiu
            wp_set_object_terms( $post_id, $manufacturers, 'pa_vyrobca' );
            
            //ziskame vsetky produktove atributy ulozene v meta
            $attributes = get_post_meta($post_id, '_product_attributes', 1);
            
            //pridame k produktovym atributom v meta novy atribut
            $attributes['pa_vyrobca'] = array(
                'name' => 'pa_vyrobca',
                'value' => '', //ak je to taxonomia, zadame prazdny string
				'position' => '',
                'is_visible' => '1',
				'is_variation' => '0',
                'is_taxonomy' => '1', //nastavenie ze ide o taxonomiu
            );

            update_post_meta($post_id, '_product_attributes', $attributes);

        }
    }

    die();

}

//https://{{DOMENA}}/wp-admin/admin-ajax.php?action=px_convert_tax_to_attribute
add_action('wp_ajax_px_convert_tax_to_attribute', 'px_convert_tax_to_attribute');
				
			

Funkciu možno napojiť ako akciu pre ajaxové spracovanie pomocou hooku „wp_ajax_{meno_funkcie}“. Funkciu teda spustíme po navštívení url adresy: {domena}/wp-admin/admin-ajax.php?action=px_convert_tax_to_attribute.

Treba spomenúť, že v prípade veľkého počtu produktov, je potrebné „dávkovať“ množstvo produktov a spúšťať funkciu postupne. 

Roman Kraiger

Roman Kraiger

Zakladateľ agentúry Pixeler, vášnivý cyklista, programátor a občasný bloger.

Páčil sa Vám tento článok?

Odmeňte ho páčikom.

alebo ho zdieľajte medzi priateľmi na:

Ďalšie články

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *