#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;