Замените изображение продукта заполнителем на основе ролей пользователей в WooCommerce

В WooCommerce я использую роли пользователей, чтобы определить, что может видеть каждая роль пользователя. Если пользователь является «клиентом» или «администратором», он может видеть изображение продукта, в противном случае он видит изображение-заполнитель WooCommerce по умолчанию.

Для этого я использую код ниже:

function woocommerce_product_get_image_id_callback( $value ) {
    global $current_user;

    if ( in_array( 'customer', (array) $current_user->roles )|| in_array( 'administrator', (array) $current_user->roles )) {
        return $value;
    } else {
        return false;
    }
}
add_filter( 'woocommerce_product_get_image_id', 'woocommerce_product_get_image_id_callback', 10, 1 );

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

Может ли кто-нибудь помочь исправить это, пожалуйста? Может быть, отключить выбор вариантов продукта в if?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
187
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

add_filter( 'woocommerce_product_variation_get_image_id', 'woocommerce_product_get_image_id_callback', 10, 2 );
add_filter( 'woocommerce_product_get_image_id', 'woocommerce_product_get_image_id_callback', 10, 2 );
function woocommerce_product_get_image_id_callback( $image_id, $product ) {
    if ( ! ( current_user_can('customer') || current_user_can('administrator') ) ) {
        $image_id = '';
    }
    return $image_id;
}

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

Супер, работает идеально. Но мне пришлось инвертировать $image_id = ' '; и вернуть $image_id;

Kevin Sneyers 08.04.2019 11:35

Другие вопросы по теме