Prerrequisitos
- WordPress con WooCommerce activo.
- Producto configurado (atributos y variaciones, si aplica).
- Posibilidad de añadir un snippet en el tema hijo o con un gestor de snippets.
Shortcode
Inserta este código en tu tema hijo (functions.php) o en un plugin de snippets:
<?php
// Shortcode: [mini_add_to_cart id=123]
add_shortcode('mini_add_to_cart', function($atts){
if ( ! function_exists('wc_get_product') ) return '';
$a = shortcode_atts(['id' => ''], $atts);
$product = wc_get_product( absint($a['id']) );
if ( ! $product ) return '';
// Cargar scripts necesarios para variaciones fuera de la ficha de producto
wp_enqueue_script('wc-add-to-cart-variation');
wp_enqueue_script('wc-add-to-cart');
// Cambiar texto del botón SOLO en este bloque
$btn_filter = function(){ return __('COMPRAR AHORA','woocommerce'); };
add_filter('woocommerce_product_single_add_to_cart_text', $btn_filter, 999);
// Insertar hidden para redirigir al carrito
$hidden_cb = function(){ echo '<input type="hidden" name="wcacf_redirect" value="1">'; };
add_action('woocommerce_before_add_to_cart_button', $hidden_cb, 1);
// Preparar global para plantillas nativas
$backup = isset($GLOBALS['product']) ? $GLOBALS['product'] : null;
$GLOBALS['product'] = $product;
ob_start();
echo '<div class="mini-atc-wrap">';
if ( $product->is_type('variable') ) {
wc_get_template('single-product/add-to-cart/variable.php', [
'available_variations' => $product->get_available_variations(),
'attributes' => $product->get_variation_attributes(),
'selected_attributes' => $product->get_default_attributes(),
]);
} elseif ( $product->is_type('simple') ) {
wc_get_template('single-product/add-to-cart/simple.php');
} else {
woocommerce_template_single_add_to_cart();
}
echo '</div>';
$html = ob_get_clean();
// Limpiar hooks y global
remove_action('woocommerce_before_add_to_cart_button', $hidden_cb, 1);
remove_filter('woocommerce_product_single_add_to_cart_text', $btn_filter, 999);
$GLOBALS['product'] = $backup;
return $html;
});
// Redirigir al carrito solo cuando el hidden está presente
add_filter('woocommerce_add_to_cart_redirect', function($url){
if ( isset($_REQUEST['wcacf_redirect']) && $_REQUEST['wcacf_redirect'] === '1' ) {
return wc_get_cart_url();
}
return $url;
}, 999);
// Evitar comillas tipográficas en el shortcode
add_filter('no_texturize_shortcodes', function($shortcodes){
$shortcodes[] = 'mini_add_to_cart';
return $shortcodes;
});
Uso
Coloca el shortcode en cualquier página (bloque “Shortcode” o elemento “Shortcode” del builder):
[mini_add_to_cart id=684]
Cómo funciona
- Renderiza las plantillas nativas (
variable.php
/simple.php
) para conservar precio dinámico, stock y validaciones. - El texto del botón se cambia a “COMPRAR AHORA” solo durante la renderización del bloque.
- Se añade un campo oculto para solicitar la redirección al carrito tras añadir.
- Se encolan los scripts de variaciones para que el formulario funcione fuera de la ficha de producto.
Solución de problemas
- No cambia el precio al elegir variación: confirma que se encoló
wc-add-to-cart-variation
y que los nombres de atributos sonattribute_*
idénticos a los slugs. - No redirige al carrito: inspecciona el HTML y verifica el
<input name="wcacf_redirect" value="1">
; revisa que el filtrowoocommerce_add_to_cart_redirect
esté activo. - El shortcode se ve como texto: usa el bloque “Shortcode” y evita editores que conviertan comillas en tipográficas. El filtro
no_texturize_shortcodes
ya está incluido.