Autor Zpráva
czmarci
Profil *
Zdravím, snažím se sepsat menší plugin pro WP e-commerce, ale narazil jsem na problém, který se mi nedaří celý den vyřešit. Cílem funkce má být přidání produktů, u nichž je zatrhnutý checkbox. WP e-commerce v základu vkládá do košíku pouze jeden produkt ale na webu na kterém pracuji je potřeba vložit do košíku všechny produkty, u kterých je zatrhnutý checkbox. Přestože jsem vše sepsal podle vzoru, zobrazí se php chyba Call to a member function set_item() on a non-object

function LucToCart($product_id, $parameters) {
            global $wpsc_cart;
            $state = $wpsc_cart->set_item($product_id, $parameters);            
        }
        if(!empty($_GET['lucproducts'])) {    
            foreach($_GET['lucproducts'] as $lucproducts){
                    
                $product_id = (int)$lucproducts;
                $default_parameters = array();
                $default_parameters['variation_values'] = null;
                $default_parameters['quantity'] = 1;
                $default_parameters['provided_price'] = null;
                $default_parameters['comment'] = null;
                $default_parameters['time_requested'] = null;
                $default_parameters['custom_message'] = null;
                $default_parameters['file_data'] = null;
                $default_parameters['is_customisable'] = false;
                $default_parameters['meta'] = null;
                    
                $provided_parameters = array();
                $parameters = array_merge( $default_parameters, (array)$provided_parameters );
                LucToCart($product_id, $parameters);
            }    
        }

Všem děkuji za reakce
Magnus123
Profil
Ahoj. Píše ti to, že proměnná $wpsc_cart není objekt. Jaká je její deklarace?
czmarci
Profil *
Ahoj, děkuji za reakci,
$wpsc_cart je objekt puginu wp e-commerce, který umožňuje manipulaci s košíkem.
Proměná je popsána např. zde http://ardeearam.wikispaces.com/wp_e-commerce ve čtvrtém bodu, kde se píše:
$wpsc_cart - a global object accessible inside themes of WP E-commerce where you can override cart items via $wpsc_cart->cart_items

Tuto proměnou úspěšně využívají i jiné pluginy.
Zkoušel jsem použít i:
do_action('wpsc_set_cart_item' , $product_id , $parameters , $this);
ale nic se nestane, sice se neukáže chyba, ale také se nepřidá žádná položka do košíku.


Přikládám ještě kompletní funkci set_item z pluginu wp e-commerce:

function set_item($product_id, $parameters, $updater = false) {
    // default action is adding

    $add_item = false;
    $edit_item = false;

    if(($parameters['quantity'] > 0) && ($this->check_remaining_quantity($product_id, $parameters['variation_values'], $parameters['quantity']) == true)) {
         $new_cart_item = new wpsc_cart_item($product_id,$parameters, $this);
         do_action('wpsc_set_cart_item' , $product_id , $parameters , $this);
         $add_item = true;
         $edit_item = false;
         if((count($this->cart_items) > 0) && ($new_cart_item->is_donation != 1)) {
            //loop through each cart item
            foreach($this->cart_items as $key => $cart_item) {
               // compare product ids and variations.
               if(($cart_item->product_id == $new_cart_item->product_id) &&
                 ($cart_item->product_variations == $new_cart_item->product_variations) &&
                 ($cart_item->custom_message == $new_cart_item->custom_message) &&
                 ($cart_item->custom_file == $new_cart_item->custom_file)) {
                  // if they are the same, increment the count, and break out;
                  if(!$updater){
                     $this->cart_items[$key]->quantity  += $new_cart_item->quantity;
                  } else {
                     $this->cart_items[$key]->quantity  = $new_cart_item->quantity;

                  }
                  $this->cart_items[$key]->refresh_item();
                  $add_item = false;
                  $edit_item = true;
               }
            }

         }
         // if we are still adding the item, add it
         if($add_item === true) {
            $this->cart_items[] = $new_cart_item;
         }

      }

     // if some action was performed, return true, otherwise, return false;
     $status = false;
      if(($add_item == true) || ($edit_item == true)) {
         $status = true;
      }
      $this->cart_item_count = count($this->cart_items);
      $this->clear_cache();
      return $status;
   }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: