У меня была проблема в Woocommerce, что не было никакого способа произвести оплату для клиента по телефону. Некоторые из наших клиентов не разбираются в технологиях и любят делать заказы таким образом. Я обнаружил приведенный ниже фрагмент кода, который устраняет требование входа в систему при переходе по ссылке «Страница оплаты клиента» на go на страницу «Оформить заказ / Оплата заказа», чтобы мы могли ввести данные оплаты для клиента.
Есть ли причина, по которой это может быть небезопасно? Конечно, конфиденциальность и безопасность клиентов абсолютно необходимы.
function allow_payment_without_login( $allcaps, $caps, $args ) {
// Check we are looking at the WooCommerce Pay For Order Page
if ( !isset( $caps[0] ) || $caps[0] != 'pay_for_order' )
return $allcaps;
// Check that a Key is provided
if ( !isset( $_GET['key'] ) )
return $allcaps;
// Find the Related Order
$order = wc_get_order( $args[2] );
if( !$order )
return $allcaps; # Invalid Order
// Get the Order Key from the WooCommerce Order
$order_key = $order->get_order_key();
// Get the Order Key from the URL Query String
$order_key_check = $_GET['key'];
// Set the Permission to TRUE if the Order Keys Match
$allcaps['pay_for_order'] = ( $order_key == $order_key_check );
return $allcaps;
}
add_filter( 'user_has_cap', 'allow_payment_without_login', 10, 3 );