Ako prekonvertovať taxonómiu na atribút produktu

Plugin Woocommerce pridáva do WordPress-u okrem vlastných typov príspevkov 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é dokážu previesť hodnoty jednej taxonómie do druhej, resp. je to možné docieliť aj priamo v databáze, avšak v prípade produktových atribútov, je to o niečo komplikovanejšie, keďže údaje o produktových atribútov sa ukladajú aj do post meta produktov. 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. 

Picture of 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:

Pridaj komentár

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