Значок категории продукта Woocommerce отображается над миниатюрой продукта - PullRequest
0 голосов
/ 20 июня 2020

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

Пожалуйста, помогите мне, мне нужно это сделать. Любая помощь будет оценена по достоинству. Спасибо.

        /**
     * Display product category thumbnail.
     *
     * @param mixed $product_category Category term Id, term name or term slug.
     */
    <?php
$thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_bid', true );
$image_url = wp_get_attachment_url( $thumbnail_id ); ?>

1 Ответ

0 голосов
/ 20 июня 2020
/**
 * Display product category thumbnail.
 *
 */
add_action('woocommerce_before_shop_loop_item_title', 'display_product_category_thumbnail', 20);
function display_product_category_thumbnail()
{
    global $product;

    $productFirstCategory = reset(get_the_terms($product->get_id(), 'product_cat'));

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

    if ($thumbnail_id = get_term_meta($productFirstCategory->term_id, 'thumbnail_id', true)) {
        $image = wp_get_attachment_image_src($thumbnail_id, $small_thumb_size);

        if (is_array($image)) {
            $image = reset($image);
        }

        $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) {
        
        $src_set = '';
        if ($image_srcset && $image_sizes) {
            $src_set = '" srcset="' . esc_attr($image_srcset) . '" sizes="' . esc_attr($image_sizes);
        }

        echo '<img src="' . esc_url($image) . '" alt="' . esc_attr($productFirstCategory->name) 
            . '" width="' . esc_attr($dimensions['width']) . '" height="' 
            . esc_attr($dimensions['height']) . $src_set . '" />';
    }
}
  1. Вы должны использовать ловушку woocommerce_before_shop_loop_item_title, которая перехватывает вашу функцию для выполнения перед названием продукта.
  2. Глобальная переменная $product содержит текущий зацикленный объект продукта.
  3. Получить текущий идентификатор продукта и передать его в функцию WP get_the_terms, чтобы получить все термины, относящиеся к этому продукту, в виде массива и получить только объект первого термина с помощью функции PHP reset и присвоить его переменная $productFirstCategory
  4. Функция WooCommerce wc_get_image_size извлекает детали измерения в виде массива
  5. Следующий if-else block используется для назначения либо изображения этой категории продукта, либо изображения по умолчанию
  6. Последний if condition используется для вывода изображения перед заголовком

Изображение продукта и категории

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