Изменение функции для получения родительской категории товара Woocommerce
У меня есть функция, которая добавляет мета-keywords из категорий продуктов в магазине Woocommerce на странице продукта.
Проблема в том, что с этой функцией родительская категория товара не берется в качестве ключевых слов, а я бы хотел, чтобы функция брала и родительскую категорию. Могу ли я сделать это?
add_action( 'wp_head', 'wcs_add_meta_keywords', 2 );
function wcs_add_meta_keywords() {
if ( is_product() ) {
$product_cats = (array) wp_get_post_terms( get_the_id(), 'product_cat', array('fields' => 'names') );
$product_tags = (array) wp_get_post_terms( get_the_id(), 'product_tag', array('fields' => 'names') );
}
if ( ! empty( $product_cats ) || ! empty( $product_tags ) ){
echo '<meta name="keywords" content="' . implode( ', ', array_merge( $product_cats, $product_tags ) ) . '" />' . "\n";
}
}
wp_get_post_terms() получает только выделенные в админке термины. Поэтому get_ancestors() тебе нужно применить.
Как-то так можно сделать (код не тестировал, просто написал):
function wcs_add_meta_keywords() { if ( is_product() ) { $post_id = get_the_id(); $term_names = []; foreach( [ 'product_cat', 'product_tag' ] as $tax ){ $term_ids = wp_get_post_terms( $post_id, $tax, [ 'fields' => 'ids' ] ); // add all parents foreach( $term_ids as $termid ){ array_unshift( $term_ids, ...get_ancestors( $termid, $tax ) ); } $term_ids = array_unique( $term_ids ); // turn to names foreach( $term_ids as $term_id ){ $term_names[] = get_term( $term_id )->name; } } } if( $term_names ){ echo '<meta name="keywords" content="' . esc_attr( implode( ', ', $term_names ) ) . '" />' . "\n"; } }