WordPress как на ладони
Прибыльная монетизация. Выгодно. Безопасно. Стабильно. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Изменение функции для получения родительской категории товара 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";
	}
}
0
leo
месяц назад 1
  • 0
    Kama9026

    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";
    	}
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация