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

#php #wordpress #woocommerce #product #user-roles

#php #wordpress #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?

Ответ №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 файл вашей активной дочерней темы (или active theme). Протестировано и работает.

Комментарии:

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