Вот код для того, что бы все кнопки "Добавить в корзину" переадресовывали на страницу оплаты. К сожалению, не работает с ajax-based кнопками (их можно отключить в Woocommerce --> Settings --> Catalog --> Enable AJAX add to cart buttons on archives):
add_filter( 'add_to_cart_redirect', 'add_to_cart_redirect_to_checkout');
function add_to_cart_redirect_to_checkout() {
global $woocommerce;
return $woocommerce->cart->get_checkout_url();
}
Это так, навскидку. Подумаю на досуге, как сделать параллельно две кнопки. Пока мне видится вариант примерно такой:
1. Во всех темплейтах добавить кастомные кнопки
2. В зависимости от того, на какой странице: каталога или одного продукта, кнопки должны быть то ли урлами (
example.com/?add-to-cart=486&buy_now), то ли сабмит баттонами
<input type="submit" name="buy_now" ..... />
3. Кастомный обработчик $_POST и $_GET, который вручную, используя классы типа WC_Cart, WC_Product и тд, добавляет товар в корзину и редиректит на чекаут
add_action('init', 'add_to_cart_redirect');
function add_to_cart_redirect() {
if ( isset($_GET['buy_now']) && .... || isset($_POST['buy_now'] ) {
// тут добавление в корзину и тд
// .....
// .....
wp_safe_redirect( $woocommerce->cart->get_cart_url() );
exit;
}
}
Тут, опять же, будет спорна обработка аяксовых запросов, для нее нужно будет дописывать отдельный обработчик.