Bekk1111
Estoy usando este código simple para agregar un botón ‘comprar ahora’ en una sola página de producto.
add_action( 'woocommerce_after_add_to_cart_button', 'add_content_after_addtocart' );
function add_content_after_addtocart() {
// get the current post/product ID
$current_product_id = get_the_ID();
// get the product based on the ID
$product = wc_get_product( $current_product_id );
// get the "Checkout Page" URL
$checkout_url = WC()->cart->get_checkout_url();
// run only on simple products
if( $product->is_type( 'simple' ) ) {
echo '<a href="'.$checkout_url.'?add-to-cart=".$current_product_id."" class="mongo_single_add_to_cart_button button">Buy Now</a>';
}
}
Este código redirige efectivamente a la página de pago y agrega el producto al carrito, pero quiero agregarle dos pequeñas características:
-
Después de hacer clic en el botón, quiero que borre el carrito antes de realizar la acción.
-
Después de agregar el producto al carrito, quiero que redirija a los usuarios a ‘/verificar’ página. En este momento envía a los usuarios en ‘pago/?agregar-al-carrito=3122’lo que significa que cualquier actualización en la página de pago agrega 1 producto al carrito automáticamente.
¿Algún consejo?
En lugar de usar el add-to-cart
param en su url, lo que hará que se agregue el producto (pero también realizará otras acciones en WooCommerce), puede usar una url personalizada para su botón y el template_redirect
gancho de acción
De esa manera, se deshace de la funcionalidad integrada en WooCommerce y puede realizar sus propias acciones personalizadas en función de los parámetros GET.
Entonces obtienes:
// Add new/extra button
function action_woocommerce_after_add_to_cart_button() {
global $product;
// Is a WC product
if ( is_a( $product, 'WC_Product' ) ) {
// Run only on simple products
if ( $product->is_type( 'simple' ) ) {
// Get product ID
$product_id = $product->get_id();
// Get permalink
$permalink = $product->get_permalink();
// Output url
echo '<a href="' . $permalink . '?product_id=' . $product_id . '&redirect_checkout=true" class="mongo_single_add_to_cart_button button">'. __ ( 'Buy Now', 'woocommerce' ) . '</a>';
}
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'action_woocommerce_after_add_to_cart_button', 10 );
// Redirect
function action_template_redirect() {
// Determines whether the current request is for an administrative interface page
if ( is_admin() ) return;
// Returns true when viewing a single product
if ( ! is_product() ) return;
// Get params
if ( isset( $_GET['product_id'] ) && isset( $_GET['redirect_checkout'] ) ) {
// Get param 1
$product_id = $_GET['product_id'];
// Get param 2
$boolean = $_GET['redirect_checkout'];
// WC Cart
if ( WC()->cart ) {
// 1. Empty cart
WC()->cart->empty_cart();
// 2. Add to cart
WC()->cart->add_to_cart( $product_id );
// 3. Redirect
// When true
if ( $boolean ) {
// Gets the url to the checkout page
$checkout_url = wc_get_checkout_url();
// Performs a safe (local) redirect
wp_safe_redirect( $checkout_url );
exit;
}
}
}
}
add_action( 'template_redirect', 'action_template_redirect' );
Aquí está el código para borrar el carrito antes de agregar el artículo
add_filter( 'woocommerce_add_to_cart_validation', 'ji_remove_cart_item_before_add_to_cart', 20, 3 );
function ji_remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
if( ! WC()->cart->is_empty() )
WC()->cart->empty_cart();
return $passed;}
-
Después de agregar el producto al carrito, quiero que redirija a los usuarios a la página ‘/pagar’. En este momento, envía a los usuarios a ‘checkout/?add-to-cart=3122’, lo que significa que cualquier actualización en la página de pago agrega 1 producto al carrito automáticamente.
add_filter(‘woocommerce_add_to_cart_redirect’, ‘ji_redirect_checkout_after_add_to_cart’);
función ji_redirect_checkout_after_add_to_cart() { return wc_get_checkout_url(); }
-
Gracias, pero mi objetivo es vaciar el carrito solo si un usuario hace clic en el botón “comprar ahora”. ¿Es posible?
– Bekk1111
22 de marzo a las 6:45
-
Sí, para eso necesita registrar una nueva acción ajax y llamar a esa acción cuando haga clic en el botón comprar ahora.
– Usdad Pravin
22 de marzo a las 6:57