Показывать миниатюру родительской категории WooCommerce при просмотре дочерней категории

У меня есть функция, которая возвращает миниатюру категории продукта на страницах архива для WooCommerce. Это отлично работает.

Что я хотел бы сделать, так это иметь возможность вернуть миниатюру родительской категории при просмотре дочерних категорий.

Вот код, который у меня есть сейчас:

function woocommerce_category_image() {
    if ( is_product_category() ){
        global $wp_query;
        $cat = $wp_query->get_queried_object();
        $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
        $image = wp_get_attachment_url( $thumbnail_id );
        if ( $image ) {
            echo '<img src="' . $image . '" alt="' . $cat->name . '" />';
        }
    }
}

Может ли кто-нибудь помочь изменить запрос, чтобы он отображал изображение родительской категории.

В идеале еще лучше было бы показать дочерний эскиз, если он есть, а если его нет, вернитесь к родительскому и покажите его.


person CS10    schedule 17.06.2020    source источник


Ответы (2)


Чтобы избежать пустого изображения в категории верхнего уровня, используйте следующее:

function woocommerce_category_image() {
    if ( is_product_category() ){
        $term      = get_queried_object(); // get the WP_Term Object
        $term_id   = $term->parent > 0 ? $term->parent : $term->term_id; // Avoid an empty image on the top level category
        $image_src = wp_get_attachment_url( get_term_meta( $term_id, 'thumbnail_id', true ) ); // Get image Url
    
        if ( ! empty($image_src) ) {
            echo '<img src="' . $image_src . '" alt="' . $term->name . '" />';
        }
    }
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.


Обновите (связанный с вашим комментарием)

Здесь, если для запрашиваемой категории продукта не установлено изображение, вместо него будет отображаться изображение родительской категории продукта.

function woocommerce_category_image() {
    if ( is_product_category() ){
        $term      = get_queried_object(); // get the WP_Term Object
        $image_id  = get_term_meta( $term->term_id, 'thumbnail_id', true );
        
        if( empty( $image_id ) && $term->parent > 0 ) {
            $image_id  = get_term_meta( $term->parent, 'thumbnail_id', true );
        }
        $image_src = wp_get_attachment_url( $image_id ); // Get the image Url
    
        if ( ! empty($image_src) ) {
            echo '<img src="' . $image_src . '" alt="' . $term->name . '" />';
        }
    }
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 17.06.2020
comment
Используя этот код, кажется, что он не протягивает изображение дочерней категории, если есть один набор. Он либо использует родительскую категорию, либо ее нет (если у родительской категории ее нет). Есть ли способ сначала использовать изображение категорий, а затем родительский элемент, не настроенный против дочерней категории? - person CS10; 11.08.2020
comment
@ CS10 Я добавил код, который должен помочь. - person LoicTheAztec; 11.08.2020
comment
Привет @LoicTheAztec, Очень признателен за ответ. К сожалению, это привело к сбою и невозможности загрузки сайта. Сообщается, что {в конце первой строки if является неожиданной ..? - person CS10; 11.08.2020
comment
@ CS10 Моя ошибка, извините: пропущена закрывающая скобка. Код обновлен :) - person LoicTheAztec; 11.08.2020
comment
Пятно на. Огромное спасибо! - person CS10; 11.08.2020

Просто измените $cat->term_id на $cat->parent, чтобы получить идентификатор родительского эскиза.

Окончательный код:

function woocommerce_category_image() {

if ( is_product_category() ){

    global $wp_query;
    $cat = $wp_query->get_queried_object();
    $thumbnail_id = get_term_meta( $cat->parent, 'thumbnail_id', true );
    $image = wp_get_attachment_url( $thumbnail_id );

    if ( $image ) {
        echo '<img src="' . $image . '" alt="' . $cat->name . '" />';
    }
}

Надеюсь это поможет

person Mathias Nicod    schedule 17.06.2020
comment
Спасибо, вроде как! Но теперь в родительской категории не отображается изображение, хотя у меня есть один набор. - person CS10; 17.06.2020