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.