WooCommerce creare nuovo prodotto e aggiungere al carrello al submit del form
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>

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' ) ) ) );
}
}
}

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

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.

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

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

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.

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

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

continuiamo questa discussione in chat

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.

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();
}
}
