Запретить оформление заказа, если почтовый адрес находится в черном списке WooCommerce - PullRequest
0 голосов
/ 03 ноября 2018

Я использую приведенный ниже код, и цель и задача - заблокировать определенные адреса улиц от возможности сделать заказ. Код не работает (заказы все еще можно сделать, используя любой из заблокированных адресов), и мне интересно, почему.

Вот код:

add_action( 'woocommerce_checkout_process', 'validate_address_for_spam_order' );
function validate_address_for_spam_order() {
$disableAddressList = array (
'Street name 1',
'Street name 2',
'Street name 3',
'Street name 4',
);
$billingAddress = isset( $_POST['billing_address_1'] ) ? trim( $_POST['billing_address_1'] ) : '';
$billingAddress = str_replace(array('-','_'),' ',$billingAddress);
$billingAddress = ucwords($billingAddress);
if (in_array($billingAddress, $disableAddressList))
{
wc_add_notice( __( 'Your error message here' ), 'error' );
}
}

Любая помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Сравнение уличных адресов в виде буквенных строк работает, только если они должным образом стандартизированы. Например, «123 4th Ave» и «123 Fourth Avenue» - это совершенно разные строки, но они обозначают один и тот же адрес.

Чтобы стандартизировать адреса, вам нужен инструмент стандартизации адресов. Компания, в которой я работаю, делает адрес .

0 голосов
/ 03 ноября 2018

Код у вас работает нормально, за исключением некоторых логических проблем. Я проверил код, и он не работал для меня в следующем случае

  • Когда address - это Street Name 1, то есть заглавные буквы и маленькие буквы смешиваются в адресе (ваш массив имеет название Street 1, а ваша функция php преобразует только первую букву в заглавные буквы). Таким образом, Street NAme 1, StReeT NaMe 1, STREEt Name1 при сравнении дает ложные результаты.

Так что вам придется изменить метод сравнения адресов. Я выбираю следующее, которое применимо в большинстве сравнений строк.

  • Напишите ваш массив отмененных адресов маленькими буквами
$disableAddressList = array (
'street name 1',
'street name 2',
'street name 3',
'street name 4',
);
  • Вместо ucwords() используйте strtolower().

Таким образом, код будет

add_action( 'woocommerce_checkout_process', 'validate_address_for_spam_order' );
function validate_address_for_spam_order() {
    $disableAddressList = array (
        'street name 1',
        'street name 2',
        'street name 3',
        'street name 4',
    );
    $billingAddress = isset( $_POST['billing_address_1'] ) ? trim( $_POST['billing_address_1'] ) : '';
    $billingAddress = str_replace(array('-','_'),' ',$billingAddress);
    $billingAddress = strtolower($billingAddress);
    if (in_array($billingAddress, $disableAddressList))
    {
        wc_add_notice( __( 'Your error message here' ), 'error' );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...