Привет коллеги!
Мне нужно сделать один хитрый финт со скидками для тех кому дан доступ в WAU, не будем вдаваться в детали, вопрос в другом. Я нашел один код php для настройки скидок.
Суть вопроса - мне нужно сделать так чтоб мой код:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>=2 && $value['quantity']<5) { $discount = $value['data']->price * 0.02;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=5 && $value['quantity']<10) { $discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=10) {
$discount = $value['data']->price * 0.10;
$value['data']->price = $value['data']->price - $discount;
} else { ''; }
}
}
Применился только к тем кому дан доступ в WAU.
Я пробовал вот такую штуку:
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);
//соответствие доступа
$important = 0; //1
if($WAU_User->is_branch_access($account_ids, $important)){ ?>
Но не получилось.
Вобщем буду очень благодарен если вы мне подскажите с кодом, как делать так чтоб нужные мне функции срабатывали для тех кому дан доступ в WAU.
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);//соответствие доступа
$important = 0; //1
if($WAU_User->is_branch_access($account_ids, $important)){ ?>
Здравствуйте Андрей!
Да, код вполне верный, потому-что писал его умный человек - вы:) И он работает когда я применяю его на обычных страницах для скрытие контента.
Но, когда я пробую обернуть нужную мне функцию этим кодом и это все вставляю в function.php то при заходе на сайт выдает фатальную ошибку:
Fatal error: Uncaught Error: Call to a member function is_branch_access() on null in /home/customer/www/minnadenoukasan.life/public_html/wp-content/themes/minnadenoukasan/functions.php:344 Stack trace: #0 /home/customer/www/minnadenoukasan.life/public_html/wp-settings.php(514): include() #1 /home/customer/www/minnadenoukasan.life/public_html/wp-config.php(89): require_once('/home/customer/...') #2 /home/customer/www/minnadenoukasan.life/public_html/wp-load.php(37): require_once('/home/customer/...') #3 /home/customer/www/minnadenoukasan.life/public_html/wp-blog-header.php(13): require_once('/home/customer/...') #4 /home/customer/www/minnadenoukasan.life/public_html/index.php(17): require('/home/customer/...') #5 {main} thrown in /home/customer/www/minnadenoukasan.life/public_html/wp-content/themes/minnadenoukasan/functions.php on line 344
Код в function.php я вставляю вот такой:
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);
//соответствие доступа
$important = 0; //1
if($WAU_User->is_branch_access($account_ids, $important)){
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>=2 && $value['quantity']<5) { $discount = $value['data']->price * 0.02;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=5 && $value['quantity']<10) { $discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=10) {
$discount = $value['data']->price * 0.10;
$value['data']->price = $value['data']->price - $discount;
} else { ''; }
}
}
}
И еще, пользуясь возможностью, хочу спросить у мудрого Андрея:)
Я вот не до конца понимаю как связана вот эта строчка:
$account_ids = array(1,3);
С созданными мною аккаунтами доступа. Я вот эту строчку просто как мартышка скопировал и использовал.
Вот например, есть созданный мною аккаунт доступа:
Как мне понять какой у него id, чтоб прописать его в этой строчке $account_ids = array(1,3); работать именно с этим аккаунтом доступа
И почему в этой строчке $account_ids = array(1,3); прописаны 1,3 :)?
Оборачивать в условие саму функцию function add_custom_price( $cart_object ) - не надо
Достаточно в теле функции перед foreach проверить:
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);
//соответствие доступа
$important = 0; //1
//Если доступа нет - прекращаем выполнение
if(!$WAU_User->is_branch_access($account_ids, $important)){
return;
}
Preci
Здравствуйте Preci!
Спасибо за то что помогаете!
Хочу уточнить - вы предлагаете сделать вот так:
function add_custom_price( $cart_object ) {
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);
//соответствие доступа
$important = 0; //1
//Если доступа нет - прекращаем выполнение
if(!$WAU_User->is_branch_access($account_ids, $important)){
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>=2 && $value['quantity']<5) { $discount = $value['data']->price * 0.02;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=5 && $value['quantity']<10) { $discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=10) {
$discount = $value['data']->price * 0.10;
$value['data']->price = $value['data']->price - $discount;
} else { ''; }
}
}
Правильно?
function add_custom_price( $cart_object ) {
global $WAU_User;
//идентификаторы доступа,
//которыми закрываем контент
$account_ids = array(1,3);
//соответствие доступа
$important = 0; //1
//Если доступа нет - прекращаем выполнение
if(!$WAU_User->is_branch_access($account_ids, $important)){
return;
}
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>=2 && $value['quantity']<5) {
$discount = $value['data']->price * 0.02;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=5 && $value['quantity']<10) {
$discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
}
elseif ($value['quantity']>=10) {
$discount = $value['data']->price * 0.10;
$value['data']->price = $value['data']->price - $discount;
}
}