WooCommerce creare nuovo prodotto e aggiungere al carrello al submit del form

25 ott 2013, 14:25:38
Visualizzazioni: 25.6K
Voti: 3

Sto personalizzando il plugin WooCommerce per aggiungere prodotti dal frontend al carrello. Ho scritto la funzione in functions.php, ma ricevo un errore fatale.

Ricevo questo errore-->

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

Qualcuno ha idea di come risolverlo?

Il mio file functions.php

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

    function customcart() { 
       echo "sono nella funzione";

    //global $woocommerce;

    $my_post = array(
      'post_title'    => 'Il mio post',
      'post_content'  => 'Questo è il mio post.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'

    );


    // Inserisce il post nel database
     $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);


      //Errore in questa riga
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );




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

    customcart();
      }

Il mio file HTML

<form name="addpro" method="post" action="">
    <input type="submit" name="addcustomcarts" value="AGGIUNGI AL CARRELLO" />
  </form> 
4
Commenti

Cosa succede se rimuovi il commento da //global $woocommerce;?

fuxia fuxia
25 ott 2013 15:10:28

ottengo lo stesso errore.. @toscho

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

hai qualche idea????@toscho

Sanjay Nakate Sanjay Nakate
25 ott 2013 15:21:33
  1. Ho già fornito un suggerimento alla tua domanda originale su SO dove hai chiesto esattamente la stessa cosa. 2. Ho votato per chiudere la tua domanda come ti ho già detto su SO perché sarebbe fuori tema qui. 3. Stai dirottando la domanda di qualcun altro per il tuo tornaconto personale.
helgatheviking helgatheviking
17 nov 2015 14:36:58
Tutte le risposte alla domanda 3
14

Non sono sicuro esattamente di cosa tu stia facendo, ma il seguente codice ha funzionato per me nel creare un nuovo prodotto e aggiungerlo al carrello. Nota: ho dovuto usare $_GET per testare sul mio setup poiché non ho il resto del tuo codice e non avevo voglia di creare un form.

MODIFICA: Ho aggiunto un semplice elemento <form> e sono passato a $_POST. MODIFICA 2: Ho rimosso il form. Apparentemente l'OP ha il form nella pagina frontale.

add_action('init', 'customcart');

function customcart() {

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

    global $woocommerce;

    $my_post = array(
      'post_title'    => 'Il mio articolo',
      'post_content'  => 'Questo è il mio articolo.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'
    );

    // Inserisce l'articolo nel database
    $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' );

      //Errore su questa linea.
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );

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

    }

  }

}
25 ott 2013 17:42:29
Commenti

ho un modulo con un pulsante di invio e il metodo del form è post

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

il tuo codice non funziona, ho usato post invece di get

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

Sei sicuro che il tuo form sia impostato su post? Perché, ho cambiato in $_POST e una volta cliccato su 'Invia' il post viene inserito e aggiunto al carrello.

helgatheviking helgatheviking
25 ott 2013 18:16:19

guarda il mio modulo <form name="addpro" method="post" action=""> <input type="submit" name="addcustomcarts" value="AGGIUNGI AL CARRELLO" /> </form>

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

puoi condividere il tuo codice e mostrare esattamente quali modifiche hai fatto nel file function.php

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

Il mio codice è già pubblicato sopra. Inoltre dovresti modificare la tua domanda con il codice del tuo modulo, poiché può essere difficile leggere il codice nei commenti.

helgatheviking helgatheviking
25 ott 2013 18:25:21

Non credo che il valore del pulsante di invio venga inviato. Guarda il mio codice modificato e prova quello.

helgatheviking helgatheviking
25 ott 2013 18:28:01

puoi verificarlo, ho aggiunto il mio modulo HTML in fondo

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

Ho provato il tuo modulo e il valore del pulsante di invio non viene inviato. Per favore prova quello che ho suggerito.

helgatheviking helgatheviking
25 ott 2013 18:32:00

cosa scrivi questo codice in function.php

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

continuiamo questa discussione in chat

helgatheviking helgatheviking
25 ott 2013 18:44:40

hey sei un genio...................

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

Hai qualche idea sugli allegati email di WooCommerce.

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

add_action('init', 'customcart'); invece dell'hook 'init' funzionerà con 'template_redirect'

Dhara Talaviya Dhara Talaviya
9 mar 2021 19:03:31
Mostra i restanti 9 commenti
2

Il $woocommerce->cart apparentemente non è un oggetto durante la chiamata. Impostalo per essere verificato prima della riga che dà l'errore:

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

Questo assicurerà che il carrello esista e non eseguirà la riga se non è presente.

25 ott 2013 15:56:05
Commenti

funziona ma quando reindirizzo tramite exit( wp_redirect( home_url( "cart"))); dice che il tuo carrello è vuoto

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

funziona ma quando reindirizzo alla pagina del carrello mostra che il tuo carrello è vuoto

Sanjay Nakate Sanjay Nakate
25 ott 2013 16:08:58
0
add_action( 'template_redirect', 'aggiungi_al_carrello_pagina_personalizzata_e_redirect');
 
function aggiungi_al_carrello_pagina_personalizzata_e_redirect(){
 
    if( is_page( 'mia-pagina' ) ) { // puoi anche passare un ID di pagina invece dello slug
 
        WC()->cart->add_to_cart( 72 ); // aggiunge al carrello il prodotto con ID 72
        wp_safe_redirect( wc_get_checkout_url() );
        exit();
 
    }
 
}
9 mar 2021 19:04:27