WooCommerce creează un produs nou și adaugă în coș la trimiterea formularului

25 oct. 2013, 14:25:38
Vizualizări: 25.6K
Voturi: 3

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> 
4
Comentarii

Ce se întâmplă dacă scoți din comentariu //global $woocommerce;?

fuxia fuxia
25 oct. 2013 15:10:28

tot primesc aceeași eroare.. @toscho

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

ai vreo idee????@toscho

Sanjay Nakate Sanjay Nakate
25 oct. 2013 15:21:33
  1. Am furnizat deja o sugestie la întrebarea ta originală pe SO unde ai întrebat exact același lucru. 2. Am votat pentru închiderea întrebării tale, așa cum ți-am spus deja pe SO, că ar fi off topic aici. 3. Tu îți însușești întrebarea altcuiva pentru beneficiul tău personal.
helgatheviking helgatheviking
17 nov. 2015 14:36:58
Toate răspunsurile la întrebare 3
14

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

    }

  }

}
25 oct. 2013 17:42:29
Comentarii

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

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

codul tău nu funcționează, am folosit post în loc de get

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

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ș.

helgatheviking helgatheviking
25 oct. 2013 18:16:19

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

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

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

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

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.

helgatheviking helgatheviking
25 oct. 2013 18:25:21

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

helgatheviking helgatheviking
25 oct. 2013 18:28:01

poți verifica, am adăugat formularul meu HTML în partea de jos

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

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

helgatheviking helgatheviking
25 oct. 2013 18:32:00

ce scrii acest cod în fișierul function.php

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

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

helgatheviking helgatheviking
25 oct. 2013 18:44:40

hei, ești geniu...................

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

Ai vreo idee despre atașamentele de e-mail în WooCommerce.

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

add_action('init', 'customcart'); în loc de hook-ul 'init', va funcționa cu 'template_redirect'

Dhara Talaviya Dhara Talaviya
9 mar. 2021 19:03:31
Arată celelalte 9 comentarii
2

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.

25 oct. 2013 15:56:05
Comentarii

funcționează, dar când redirecționez folosind exit( wp_redirect( home_url( "cart"))); apare mesajul că coșul tău este gol

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

funcționează, dar când redirecționez către pagina coșului afișează că coșul tău este gol

Sanjay Nakate Sanjay Nakate
25 oct. 2013 16:08:58
0
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();
 
    }
 
}
9 mar. 2021 19:04:27