185 подписчиков

Небольшой кейс с криво написанным плагином метода доставки через Боксберри.


Один из пользователей плагина AWOOC столкнулся с проблемой критической ошибки при совместной работе плагина AWOOC и плагина для доставки через Боксберри.

Начали разбираться, выяснилось, что в плагине Бексберри, на хуке создания заказа подвешена функция, которая вообще не проверяет, приходят данные или нет, и какие это данные. В итоге, на чекауте это работает, а вот на любой другой странице создание заказа будет фаталить.

Решение. Ничего другого, кроме как отключить с хука и по новой подключить эту функцию не придумал.
Код такой

/**
* Отключение функции
*/
add_action( 'after_setup_theme', function () {

remove_action( 'woocommerce_new_order', 'boxberry_put_choice_code' );
} );

/**
* Новое подключение функции
*/
add_action( 'woocommerce_new_order', function () {

if ( ! is_checkout() ) {
return;
}

$shipping_method = array_shift( $_POST['shipping_method'] );
$shipping_method_name = preg_replace( '/\d+/', '', $shipping_method );
$array = get_user_meta( get_current_user_id(), '_boxberry_array', true );

if ( isset( $_COOKIE['bxb_code'], $_COOKIE['bxb_address'] ) ) {
update_post_meta( $order_id, 'boxberry_code', sanitize_text_field( $_COOKIE['bxb_code'] ) );
update_post_meta( $order_id, 'boxberry_address', sanitize_text_field( $_COOKIE['bxb_address'] ) );
}

update_user_meta( get_current_user_id(), '_boxberry_array', [] );
} );
ПРи повторном подключении добавил проверку на страницу оформления заказа, если это не страница чекаута то ничего не делаем.

Вот как то так... Пишите в коментах, что думаете

На заметку: для Боксберри - это официальный плагин, скачивается с сайта самого Боксберри. Тут вопросы к качеству кода...