WooCommerce создание нового товара и добавление в корзину при отправке формы
Я настраиваю плагин 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>

Я не совсем уверен, что именно вы делаете, но следующий код сработал у меня, создав новый товар и добавив его в корзину. Обратите внимание, мне пришлось использовать $_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' ) ) ) );
}
}
}

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

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

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

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

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

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

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

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

Похоже, что $woocommerce->cart не является объектом во время вызова. Проверьте его перед строкой, вызывающей ошибку:
if( $woocommerce->cart )
$woocommerce->cart->add_to_cart( $product_ID, $quantity=1 );
Это гарантирует, что корзина существует, и не выполнит строку, если её нет.

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

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