• Resuelto ele

    (@luishgc93)


    como añado a este código algo para que solo afecte a la id de un producto y el resto de productos pues siga con el carrito como siempre:

    Mi intención es que un producto que es gratuito o que tenga una id en concreto pues vaya directamente a facturación sin pasar por el carrito.

    /* Enviar directamente al pago */
    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
     
    function redirect_to_checkout() {
        global $woocommerce;
        $checkout_url = $woocommerce->cart->get_checkout_url();
        return $checkout_url;
    }

    sacado de aqui https://ayudawp.com/enviar-directamente-al-pago-en-woocommerce/

    • Este debate fue modificado hace 4 años, 7 meses por ele.
    • Este debate fue modificado hace 4 años, 7 meses por ele.
    • Este debate fue modificado hace 4 años, 7 meses por ele.
    • Este debate fue modificado hace 4 años, 7 meses por ele.
Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • Hola @luishgc93

    Te paso por donde tienen que ir los tiros:

    /* Enviar directamente al pago si cumple condición */
    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
    function redirect_to_checkout() {
        $checkout_url = get_permalink(get_option(‘woocommerce_checkout_page_id’));;
        if ( isset( $_REQUEST['add-to-cart'] ) ) {
           $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_REQUEST['add-to-cart'] );
           //En $product_id tienes la id del producto que estás agregando, pudiendo llamar a la clase WC_Product para obtener más info, al get_post_meta para obtener algún campo o a has_term( 'slugcategoria', 'product_cat', $product_id) para saber si está en alguna categoría.
          if ( TUCONDICIONSECUMPLE ){
           return $checkout_url;
          }
        }
    }

    Espero que te sirva para solucionar tu duda y en caso afirmativo cierres el debate para ayudarnos a mantener el foro al día.

    Iniciador del debate ele

    (@luishgc93)

    gracias por tu ayuda @adriandegrafreak pero no me funciona el código no hace nada 🙁

    /* Enviar directamente al pago si cumple condición */
    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
    function redirect_to_checkout() {
        $checkout_url = get_permalink(get_option(‘woocommerce_checkout_page_id’));;
        if ( isset( $_REQUEST['add-to-cart'] ) ) {
           $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_REQUEST['add-to-cart'] );
          if (  $product_id == 1573 ){
           return $checkout_url;
          }
        }
    }
    • Esta respuesta fue modificada hace 4 años, 7 meses por ele.

    Hola,

    El código lo he hecho al vuelo no lo he probado, veo que al final de la linea $checkout_url = he puesto dos puntos y coma.

    /* Enviar directamente al pago si cumple condición */
    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
    function redirect_to_checkout() {
        $checkout_url = get_permalink(get_option('woocommerce_checkout_page_id'));
        if ( isset( $_REQUEST['add-to-cart'] ) ) {
           $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_REQUEST['add-to-cart'] );
          if (  $product_id == 1573 ){
           return $checkout_url;
          }
        }
    }

    Ponte var_dump($_REQUEST['add-to-cart']);exit; y mira la pestaña de red > XHR para detectar que está devolviendo, al igual que var_dump($product_id);exit; y var_dump($checkout_url);exit; para saber si está mirando bien y el valor que tiene los diferentes campos que intervienen.

    Iniciador del debate ele

    (@luishgc93)

    @adriandegrafreak no entiendo con lo que me dices de ponte en var_dump :/
    el codigo sigue fallando quitando el punta coma demás

    • Esta respuesta fue modificada hace 4 años, 7 meses por ele.

    Hola,

    Buenas,
    He corregido las comillas de woocommerce_checkout_page_id que eran las tipograficas y no la comilla simple. También he puesto un apunte en el return.

    He hecho una prueba en local y me funciona, cuando el el $product_id coincide con el que marcas devuelve $checkout_url

    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
    function redirect_to_checkout() {
        $checkout_url = get_permalink(get_option('woocommerce_checkout_page_id'));
        if ( isset( $_REQUEST['add-to-cart'] ) ) {
           $product_id = (int) apply_filters( 'woocommerce_add_to_cart_product_id', $_REQUEST['add-to-cart'] );
          if (  $product_id == 1573 ){
           return $checkout_url;
          }else{
           //return url del producto, página donde quieres que se quede o para configurado en woocommerce
          }
        }
    }

    Como te digo esto en local me está funcionando, si no actua igual puede ser que tengas algún plugin u otro codigo que tb esté afectando al comportamiento de añadir al carro.

    Ya me dices que tal.

    Iniciador del debate ele

    (@luishgc93)

    ahora si funciona !! 😀 gracias @adriandegrafreak y una cuestión más ,
    donde

        }else{
           //return url del producto, página donde quieres que se quede o para configurado en woocommerce
          }

    si lo dejo asi tal cual no haría nada para el resto de productos ? no? por lo que veo, para el resto de productos si actua con normalidad, pasa por el carrito y demás.

    Exacto @luishgc93

    Esto sería por si quisieras forzar el comportamiento en los que el if devuelve FALSE.

    Si lo dejas así y hace el comportamiento que necesitas ya está bien 😉

    Iniciador del debate ele

    (@luishgc93)

    @adriandegrafreak genial, muchas gracias 🙂

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘Saltar carrito’ está cerrado a nuevas respuestas.