WooCommerce создание нового товара и добавление в корзину при отправке формы

25 окт. 2013 г., 14:25:38
Просмотры: 25.6K
Голосов: 3

Я настраиваю плагин WooCommerce для добавления товара с фронтенда в корзину. Я написал функцию в functions.php, но получаю фатальную ошибку.

Получаю следующую ошибку-->

Fatal error: Call to a member function add_to_cart() on a non-object в
C:\wamp\www\cutting-edge_server\wordpress_theme\wp-content\themes\cutting_age\responsive\functions.php на строке 56

Кто-нибудь знает, как это исправить?

Мой файл function.php

if (isset($_POST["addcustomcarts"]))
        {
       echo $_SERVER[QUERY_STRING];
      // echo $_SERVER[REQUEST_URI];
        echo "я в условии if";
        //exit();
    add_filter('woocommerce_before_cart', 'customcart');

    function customcart() { 
       echo "я в функции";

    //global $woocommerce;

    $my_post = array(
      'post_title'    => 'Мой товар',
      'post_content'  => 'Это мой товар.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'

    );


    // Вставляем запись в базу данных
     $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);


      // Ошибка возникает на этой строке
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );




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

    customcart();
      }

Мой HTML файл

<form name="addpro" method="post" action="">
    <input type="submit" name="addcustomcarts" value="ДОБАВИТЬ В КОРЗИНУ" />
  </form> 
4
Комментарии

Что произойдет, если раскомментировать //global $woocommerce;?

fuxia fuxia
25 окт. 2013 г. 15:10:28

все та же ошибка.. @toscho

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 15:12:29

есть какие-то идеи????@toscho

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 15:21:33
  1. Я уже дал предложение по вашему исходному вопросу на SO, где вы задавали точно такой же вопрос. 2. Я проголосовал за закрытие вашего вопроса, так как уже говорил вам на SO, что он не по теме здесь. 3. Вы перехватываете чужой вопрос для своей личной выгоды.
helgatheviking helgatheviking
17 нояб. 2015 г. 14:36:58
Все ответы на вопрос 3
14

Я не совсем уверен, что именно вы делаете, но следующий код сработал у меня, создав новый товар и добавив его в корзину. Обратите внимание, мне пришлось использовать $_GET для тестирования в моей настройке, так как у меня нет остальной части вашего кода, и я не хотел создавать форму.

РЕДАКТИРОВАНО: Я добавил простой элемент <form> и переключился на $_POST. РЕДАКТИРОВАНО 2: Я удалил форму. Похоже, у автора вопроса форма уже есть на главной странице.

add_action('init', 'customcart');

function customcart() {

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

    global $woocommerce;

    $my_post = array(
      'post_title'    => 'Мой товар',
      'post_content'  => 'Это описание моего товара.',
      'post_status'   => 'publish',
      'post_author'   => 1,
      'post_type'     =>'product'
    );

    // Вставляем запись в базу данных
    $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' );

      //Получаем ошибку на этой строке.
      $woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );

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

    }

  }

}
25 окт. 2013 г. 17:42:29
Комментарии

у меня есть форма с кнопкой отправки и методом post

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 17:51:42

ваш код не работает, я использовал post вместо get

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 18:05:11

Вы уверены, что ваша форма настроена на post? Потому что я переключился на $_POST, и после нажатия кнопки 'Отправить' пост добавляется в корзину.

helgatheviking helgatheviking
25 окт. 2013 г. 18:16:19

посмотрите мою форму <form name="addpro" method="post" action=""> <input type="submit" name="addcustomcarts" value="ДОБАВИТЬ В КОРЗИНУ" /> </form>

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 18:19:11

можете поделиться вашим кодом, какие именно изменения вы внесли в function.php

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 18:22:09

Мой код уже опубликован выше. Также вам следует отредактировать ваш вопрос, добавив код вашей формы, так как код в комментариях может быть трудночитаемым.

helgatheviking helgatheviking
25 окт. 2013 г. 18:25:21

Я не думаю, что значение кнопки submit передается. Посмотрите мой измененный код и попробуйте его.

helgatheviking helgatheviking
25 окт. 2013 г. 18:28:01

Вы можете проверить, я добавил свою HTML-форму внизу

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 18:28:11

Я проверил вашу форму, и значение кнопки submit не передается. Пожалуйста, попробуйте то, что я предложил.

helgatheviking helgatheviking
25 окт. 2013 г. 18:32:00

что вы пишете в этом коде в файле function.php

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 18:42:26

давайте продолжим обсуждение в чате

helgatheviking helgatheviking
25 окт. 2013 г. 18:44:40

эй, ты гений...................

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 20:04:23

У вас есть какие-то идеи по поводу вложений в письма WooCommerce.

Sanjay Nakate Sanjay Nakate
9 нояб. 2013 г. 16:08:41

add_action('init', 'customcart'); вместо хука 'init' это будет работать с 'template_redirect'

Dhara Talaviya Dhara Talaviya
9 мар. 2021 г. 19:03:31
Показать остальные 9 комментариев
2

Похоже, что $woocommerce->cart не является объектом во время вызова. Проверьте его перед строкой, вызывающей ошибку:

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

Это гарантирует, что корзина существует, и не выполнит строку, если её нет.

25 окт. 2013 г. 15:56:05
Комментарии

это работает, но при перенаправлении через exit( wp_redirect( home_url( "cart"))); появляется сообщение, что ваша корзина пуста

Sanjay Nakate Sanjay Nakate
25 окт. 2013 г. 16:04:41

это работает, но при перенаправлении на страницу корзины отображается сообщение, что ваша корзина пуста

Sanjay Nakate Sanjay Nakate
25 окт. 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( 'my-page' ) ) { // можно передать ID страницы вместо слага
 
        WC()->cart->add_to_cart( 72 ); // добавляем в корзину товар с ID 72
        wp_safe_redirect( wc_get_checkout_url() );
        exit();
 
    }
 
}
9 мар. 2021 г. 19:04:27