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

В настоящее время я занимаюсь разработкой веб-сайта, который использует WooCommerce и различные расширения (все они актуальны на момент написания статьи), чтобы показать диапазон сообщений, принадлежащих пользовательскому типу сообщений.

Эти сообщения создаются пользователями веб-сайта в передней части веб-сайта с использованием специальной формы ACF. Форма интерфейса создает новую запись в типе записи «shwimmer-pool» вместе с двумя новыми продуктами — один для подписок и один для заказов.

Создание этих новых сообщений обрабатывается в нашем классе ShwimmerFormHandler. Этот класс запускается при отправке формы создания пула. Вы можете просмотреть класс в этом Gist:
https://gist.github.com/mangopearuk/c10c52498547016c6aa23c6cca26fb43

Проблема, с которой мы сталкиваемся, связана с продуктом подписок. Продукт должен быть продуктом с переменной подпиской, поскольку создатели пула могут установить 6 различных ценовых диапазонов — взрослый, детский, семейный & месяц или год подписки.

В настоящее время мы успешно создаем новый продукт подписки с помощью wp_insert_post () [строка 285], а также создаем каждый из вариантов с помощью wp_insert_post () [из строки 478]. Все они успешно зарегистрированы и работают.

Проблема, с которой мы сталкиваемся, заключается в том, что при просмотре формы покупки подписки переднего плана цена неверна, и всякий раз, когда вы выбираете вариант, появляется сообщение об ошибке: «Извините, этот продукт недоступен. Выберите другую комбинацию».

Подписка на продукт работает как положено после нажатия «Обновить» в админке. Есть идеи, как решить эту проблему?

Спасибо Энди

0

Решение

Вам, вероятно, нужно активировать переменную синхронизацию продукта.

$subscription_id = wp_insert_post( $args );
$product = wc_get_product( $subscription_id );
$product->variable_product_sync();

Кроме того, как вы обнаружили (и добавили здесь для полноты), функция синхронизации работает от _price мета. _regular_price а также _sale_price также сравниваются. Подписка устанавливает свою _subscription_price как _regular_price а затем _price это либо _regular_price или _sale_price в зависимости от того, продается ли товар. Таким образом, если вы создаете подписку программным способом, вам необходимо установить _price а также _regular_price мета.

2

Другие решения

Спасибо всем за помощь. Оказывается, это довольно просто исправить …

Плагин подписок не показывает _price а также _regular_price мета-поля, кроме sync() функция требует их. Как только я добавил эти два дополнительных поля в свой класс, функция sync () сработала.

1

По вопросам рекламы [email protected]