WooCommerce creează un produs nou și adaugă în coș la trimiterea formularului
Personalizez plugin-ul WooCommerce pentru a adăuga produse din frontend în coș. Am scris funcția în functions.php, dar primesc o eroare fatală.
Primesc această eroare-->
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
Are cineva vreo idee cum să o rezolv?
Fișierul meu functions.php
if (isset($_POST["addcustomcarts"]))
{
echo $_SERVER[QUERY_STRING];
// echo $_SERVER[REQUEST_URI];
echo "sunt în if";
//exit();
add_filter('woocommerce_before_cart', 'customcart');
function customcart() {
echo "sunt în funcție";
//global $woocommerce;
$my_post = array(
'post_title' => 'Postarea mea',
'post_content' => 'Aceasta este postarea mea.',
'post_status' => 'publish',
'post_author' => 1,
'post_type' =>'product'
);
// Inserează postarea în baza de date
$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);
//Primesc eroare pe această linie
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );
exit( wp_redirect( home_url( "cart" ) ) );
}
customcart();
}
Fișierul meu HTML
<form name="addpro" method="post" action="">
<input type="submit" name="addcustomcarts" value="ADAUGĂ ÎN COȘ" />
</form>

Nu sunt sigur exact ce încerci să faci, dar următorul cod a funcționat pentru mine în sensul că a creat un nou produs și l-a adăugat în coș. Reține că a trebuit să folosesc $_GET
pentru a testa pe configurația mea, deoarece nu am restul codului tău și nu am vrut să creez un formular.
EDIT: Am adăugat un simplu element <form>
și am trecut la $_POST
.
EDIT 2: Am eliminat formularul. Se pare că OP are deja formularul pe pagina principală.
add_action('init', 'customcart');
function customcart() {
if (isset($_POST["addcustomcarts"])) {
global $woocommerce;
$my_post = array(
'post_title' => 'Postarea mea',
'post_content' => 'Aceasta este postarea mea.',
'post_status' => 'publish',
'post_author' => 1,
'post_type' =>'product'
);
// Inserează postarea în baza de date
$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' );
// Eroare pe această linie.
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );
exit( wp_redirect( get_permalink( woocommerce_get_page_id( 'cart' ) ) );
}
}
}

am un formular cu un buton de submit și metoda formularului este post

Ești sigur că formularul tău este setat pe post? Pentru că, am trecut la $_POST
și odată ce am dat click pe 'Trimite', postarea este inserată și adăugată în coș.

vezi acest formular meu <form name="addpro" method="post" action=""> <input type="submit" name="addcustomcarts" value="ADĂUGAȚI ÎN COȘ" /> </form>

poți să împărtășești codul tău, exact ce modificări ai făcut în fișierul function.php

Codul meu este deja postat mai sus. De asemenea, ar trebui să editezi întrebarea ta cu codul tău de formular, deoarece poate fi greu de citit codul în comentarii.

Nu cred că valoarea butonului de submit este trimisă. Vezi codul meu editat și încearcă asta.

Am încercat formularul tău și valoarea butonului de submit nu este trimisă. Te rog să încerci ce am sugerat.

hai să continuăm această discuție în chat

Variabila $woocommerce->cart aparent nu este un obiect în timpul apelului. Asigură-te că este verificată înainte de linia care generează eroarea:
if( $woocommerce->cart )
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );
Aceasta va asigura că coșul de cumpărături există și nu va executa linia respectivă dacă nu este prezent.

add_action( 'template_redirect', 'add_to_cart_on_custom_page_and_redirect');
function add_to_cart_on_custom_page_and_redirect(){
if( is_page( 'pagina-mea' ) ) { // poți folosi și un ID de pagină în loc de slug
WC()->cart->add_to_cart( 72 ); // adaugă în coș produsul cu ID 72
wp_safe_redirect( wc_get_checkout_url() );
exit();
}
}
