WooCommerce crear nuevo producto y añadir al carrito al enviar formulario

25 oct 2013, 14:25:38
Vistas: 25.6K
Votos: 3

Estoy personalizando el plugin WooCommerce para añadir productos desde el frontend al carrito. He escrito la función en functions.php, pero estoy obteniendo un error fatal.

Obtengo este error-->

Fatal error: Call to a member function add_to_cart() on a non-object en
C:\wamp\www\cutting-edge_server\wordpress_theme\wp-content\themes\cutting_age\responsive\functions.php en la línea 56

¿Alguien tiene alguna idea de cómo resolverlo?

Mi archivo functions.php

if (isset($_POST["addcustomcarts"]))
        {
       echo $_SERVER[QUERY_STRING];
      // echo $_SERVER[REQUEST_URI];
        echo "estoy en if";
        //exit();
    add_filter('woocommerce_before_cart', 'customcart');

    function customcart() { 
       echo "estoy en la función";

    //global $woocommerce;

    $my_post = array(
      'post_title'    => 'Mi publicación',
      'post_content'  => 'Esta es mi publicación.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'

    );


    // Insertar la publicación en la base de datos
     $product_ID=wp_insert_post( $my_post );

     add_post_meta($product_ID, '_regular_price', 100, $unique);
     add_post_meta($product_ID, '_price', 100, $unique);
      add_post_meta($product_ID, '_stock_status', 'instock', $unique);


      //Error en esta línea.
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );




     exit( wp_redirect( home_url( "cart" ) ) );
    }

    customcart();
      }

Mi archivo HTML

<form name="addpro" method="post" action="">
    <input type="submit" name="addcustomcarts" value="AÑADIR AL CARRITO" />
  </form> 
4
Comentarios

¿Qué sucede si descomentas //global $woocommerce;?

fuxia fuxia
25 oct 2013 15:10:28

obteniendo el mismo error.. @toscho

Sanjay Nakate Sanjay Nakate
25 oct 2013 15:12:29

¿Tienes alguna idea????@toscho

Sanjay Nakate Sanjay Nakate
25 oct 2013 15:21:33
  1. Ya proporcioné una sugerencia en tu pregunta original en SO donde preguntaste exactamente lo mismo. 2. Voté para cerrar tu pregunta como ya te dije en SO que estaría fuera de tema aquí. 3. Estás secuestrando la pregunta de otra persona para beneficio personal.
helgatheviking helgatheviking
17 nov 2015 14:36:58
Todas las respuestas a la pregunta 3
14

No estoy seguro exactamente de lo que estás haciendo, pero el siguiente código funcionó para mí al crear un nuevo producto y agregarlo al carrito. Ten en cuenta que tuve que usar $_GET para probar en mi configuración ya que no tengo el resto de tu código y no me sentí como para crear un formulario.

EDITAR: He agregado un simple elemento <form> y cambiado a $_POST. EDITAR 2: He eliminado el formulario. Aparentemente el OP tiene el formulario en la página principal.

add_action('init', 'customcart');

function customcart() {

  if (isset($_POST["addcustomcarts"])) {

    global $woocommerce;

    $my_post = array(
      'post_title'    => 'Mi publicación',
      'post_content'  => 'Esta es mi publicación.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'
    );

    // Insertar la publicación en la base de datos
    $product_ID = wp_insert_post( $my_post );

    if ( $product_ID ){
      add_post_meta($product_ID, '_regular_price', 100 );
      add_post_meta($product_ID, '_price', 100 );
      add_post_meta($product_ID, '_stock_status', 'instock' );

      //Obteniendo error en esta línea.
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );

      exit( wp_redirect( get_permalink( woocommerce_get_page_id( 'cart' ) ) ) );

    }

  }

}
25 oct 2013 17:42:29
Comentarios

tengo un formulario con un botón de envío y el método del formulario es post

Sanjay Nakate Sanjay Nakate
25 oct 2013 17:51:42

tu código no funciona, usé post en lugar de get

Sanjay Nakate Sanjay Nakate
25 oct 2013 18:05:11

¿Estás seguro de que tu formulario está configurado como post? Porque, he cambiado a $_POST y una vez que hago clic en 'Enviar', el post se inserta y se agrega al carrito.

helgatheviking helgatheviking
25 oct 2013 18:16:19

mira este mi formulario <form name="addpro" method="post" action=""> <input type="submit" name="addcustomcarts" value="AGREGAR AL CARRITO" /> </form>

Sanjay Nakate Sanjay Nakate
25 oct 2013 18:19:11

¿puedes compartir tu código de los cambios exactos que hiciste en function.php?

Sanjay Nakate Sanjay Nakate
25 oct 2013 18:22:09

Mi código ya está publicado arriba. También deberías editar tu pregunta con el código de tu formulario, ya que puede ser difícil leer código en los comentarios.

helgatheviking helgatheviking
25 oct 2013 18:25:21

No creo que el valor del botón de enviar se publique. Mira mi código editado y prueba eso.

helgatheviking helgatheviking
25 oct 2013 18:28:01

puedes verificarlo, he añadido mi formulario HTML en la parte inferior

Sanjay Nakate Sanjay Nakate
25 oct 2013 18:28:11

He probado tu formulario, y el valor del botón de enviar no se publica. Por favor, prueba lo que he sugerido.

helgatheviking helgatheviking
25 oct 2013 18:32:00

qué escribes este código en function.php

Sanjay Nakate Sanjay Nakate
25 oct 2013 18:42:26

vamos a continuar esta discusión en el chat

helgatheviking helgatheviking
25 oct 2013 18:44:40

oye eres un genio...................

Sanjay Nakate Sanjay Nakate
25 oct 2013 20:04:23

¿Tienes alguna idea sobre los adjuntos de correo electrónico en WooCommerce?

Sanjay Nakate Sanjay Nakate
9 nov 2013 16:08:41

add_action('init', 'customcart'); en lugar del hook 'init' funcionará con 'template_redirect'

Dhara Talaviya Dhara Talaviya
9 mar 2021 19:03:31
Mostrar los 9 comentarios restantes
2

El objeto $woocommerce->cart aparentemente no es un objeto durante la llamada. Configúralo para que se verifique antes de la línea que genera el error:

    if( $woocommerce->cart )
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );

Esto asegurará que el carrito exista y no ejecutará la línea si no está presente.

25 oct 2013 15:56:05
Comentarios

funciona pero cuando redirijo usando exit( wp_redirect( home_url( "cart"))); aparece que tu carrito está vacío

Sanjay Nakate Sanjay Nakate
25 oct 2013 16:04:41

funciona pero cuando redirijo a la página del carrito muestra que tu carrito está vacío

Sanjay Nakate Sanjay Nakate
25 oct 2013 16:08:58
0
add_action( 'template_redirect', 'agregar_al_carrito_en_pagina_personalizada_y_redireccionar');
 
function agregar_al_carrito_en_pagina_personalizada_y_redireccionar(){
 
    if( is_page( 'mi-pagina' ) ) { // también puedes pasar un ID de página en lugar del slug
 
        WC()->cart->add_to_cart( 72 ); // agregar al carrito el producto con ID 72
        wp_safe_redirect( wc_get_checkout_url() );
        exit();
 
    }
 
}
9 mar 2021 19:04:27