Отображение миниатюры категории продукта на странице продукта Woocommerce - PullRequest
0 голосов
/ 26 ноября 2018

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

Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

@ LoicTheAztec На самом деле для отображения описания я сделал фрагмент

global $post, $product;
$categ = $product->get_categories();
$term = get_term_by ( 'name' , strip_tags($categ), 'product_cat' );
echo $term->description;

Я думал, что с помощью echo thumbnail_id это сработает, но нет!спасибо

0 голосов
/ 01 декабря 2018

@ LoicTheAztec Здравствуйте, Спасибо за ваши советы и объяснения

Я хочу показать изображение и описание категории на странице продукта.

У меня есть категория художников ина странице каждого товара я хочу отобразить изображение и описание

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

Пример: у меня есть категория artisteи и в подкатегориях имена художников

На моей странице продукта я бы отобразил изображение и описание художника

Вот что я сделал: На своей странице продукта я создал поле с помощью acfкоторый извлекает мою подкатегорию

в шаблоне моего продукта. Я сделал фрагмент

global $post, $product;
$categ = $product->get_categories();
$term = get_term_by ( 'name' , strip_tags($categ), 'product_cat' );
echo $term->description;

Все в порядке. Описание дисплея

Когда я использую вашу функцию, моя страница продолжает загружаться, поэтому яделать что-то не так, но что?

0 голосов
/ 26 ноября 2018

Следующая функция, основанная на исходном коде woocommerce_subcategory_thumbnail(), отображает миниатюру любой категории продуктов из идентификатора категории, имени или слага:

/**
 * Display product category thumbnail.
 *
 * @param mixed $product_category Category term Id, term name or term slug.
 */

function display_product_category_thumbnail( $product_category ) {
    $taxonomy = 'product_cat';

    if( term_exists( $product_category, $taxonomy ) ) {
        if( is_numeric($product_category) )
            $field_type = 'term_id';
        else
            $field_type = 'slug';
    } else
        return;

    $term = get_term_by( $field_type, sanitize_title( $product_category ), 'product_cat' );

    $small_thumb_size = 'woocommerce_thumbnail';
    $dimensions           = wc_get_image_size( $small_thumb_size );

    if ( $thumbnail_id = get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true ) ) {
        $image        = wp_get_attachment_image_src( $thumbnail_id, $small_thumb_size );
        $image        = $image[0];
        $image_srcset = function_exists( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset( $thumbnail_id, $small_thumb_size ) : false;
        $image_sizes  = function_exists( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes( $thumbnail_id, $small_thumb_size ) : false;
    } else {
        $image        = wc_placeholder_img_src();
        $image_srcset = false;
        $image_sizes  = false;
    }

    if ( $image ) {
        // Prevent esc_url from breaking spaces in urls for image embeds.
        // Ref: https://core.trac.wordpress.org/ticket/23605.
        $image = str_replace( ' ', '%20', $image );

        // Add responsive image markup if available.
        if ( $image_srcset && $image_sizes ) {
            echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $term->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" srcset="' . esc_attr( $image_srcset ) . '" sizes="' . esc_attr( $image_sizes ) . '" />';
        } else {
            echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $term->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" />';
        }
    }
}

Протестировано и работает


Обновление - дополнение (относится к вашим комментариям)

Чтобы получить категории продуктов из объекта WC_Product $product и отобразить его с описанием иминиатюру, вы будете использовать:

global $product;

$term_ids = $product->get_category_ids();

// Loop through product category IDs
foreach( $term_ids as $term_id ){
    $term = get_term ( $term_id, 'product_cat' );

    // Product category name
    echo '<p>' . $term->name . '</p>';

    // Product category description
    echo '<p>' . $term->description . '</p>';

    // Product category description
    display_product_category_thumbnail( $term_id )
}

Протестировано и работает

Примечание: $product->get_categories(); устарело и устарело иустарел и дает список отформатированных категорий продуктов, что на самом деле не самый лучший эффективный способ.

Для информации: get_categories() метод заменяется функцией wc_get_product_category_list()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...