У нас есть оптовая сеть с интернет-магазином. Нам нужно заблокировать покупку нового клиента, пока мы его не проверим (из-за ограничений на доставку и т. Д.). Возможно ли это (назначив ему какую-то другую роль или заблокировав роль покупателя от покупки)?
Кстати, я нашел это, но я бы предпочел больше меняющегося пользователя, а не продуктов, потому что мы хотим блокировку для всех продуктов. Вставляя новые, кто-то может забыть о настройке правильной категории продукта.
Ограничить продукт woocommerce для определенного покупателя
Следующий код отключит покупки товара (скрытая кнопка добавления в корзину везде) пока клиент не будет одобрен менеджером магазина на страницах раздела «Администратор» с настраиваемым полем выбора, чтобы разрешить покупателю покупать товары:
// Disable purcahses if customer is not approved
add_filter( 'woocommerce_is_purchasable', 'purchasable_products_based_on_city', 10, 2 );
function purchasable_products_based_on_city( $purchasable, $product ) {
if( ! get_user_meta( get_current_user_id(), 'can_purchase', true ) )
$purchasable = false;
return $purchasable;
}
// Add allowed custom user field in admin
add_action( 'show_user_profile', 'add_user_validation_field', 1, 1 );
add_action( 'edit_user_profile', 'add_user_validation_field', 1, 1 );
function add_user_validation_field( $user )
{
$value = get_user_meta( $user->ID, 'can_purchase', true );
$selected0 = ! $value ? ' selected="selected"' : '';
$selected1 = $value ? ' selected="selected"' : '';
?><h3><?php _e("Customer validation (Allow purchase)", "woocommerce" ); ?></h3>
<table class="form-table"><tr>
<th><label for="can_purchase">Customer can purchase</label></th>
<td><select style="" id="can_purchase" name="can_purchase" class="select short">
<option value=""<?php echo $selected0; ?>><?php _e("Not allowed", "woocommerce"); ?></option>
<option value="1"<?php echo $selected1; ?>><?php _e("Yes (validated)", "woocommerce"); ?></option>
</select></td></tr></table><br /><?php
}
// Save allowed custom user field in admin
add_action( 'personal_options_update', 'save_user_validation_field' );
add_action( 'edit_user_profile_update', 'save_user_validation_field' );
function save_user_validation_field( $user_id )
{
if( isset($_POST['can_purchase']) )
update_user_meta( $user_id, 'can_purchase', esc_attr( $_POST['can_purchase'] ) );
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Других решений пока нет …