В настоящее время я занимаюсь разработкой веб-сайта, который использует WooCommerce и различные расширения (все они актуальны на момент написания статьи), чтобы показать диапазон сообщений, принадлежащих пользовательскому типу сообщений.
Эти сообщения создаются пользователями веб-сайта в передней части веб-сайта с использованием специальной формы ACF. Форма интерфейса создает новую запись в типе записи «shwimmer-pool» вместе с двумя новыми продуктами — один для подписок и один для заказов.
Создание этих новых сообщений обрабатывается в нашем классе ShwimmerFormHandler. Этот класс запускается при отправке формы создания пула. Вы можете просмотреть класс в этом Gist:
https://gist.github.com/mangopearuk/c10c52498547016c6aa23c6cca26fb43
Проблема, с которой мы сталкиваемся, связана с продуктом подписок. Продукт должен быть продуктом с переменной подпиской, поскольку создатели пула могут установить 6 различных ценовых диапазонов — взрослый, детский, семейный & месяц или год подписки.
В настоящее время мы успешно создаем новый продукт подписки с помощью wp_insert_post () [строка 285], а также создаем каждый из вариантов с помощью wp_insert_post () [из строки 478]. Все они успешно зарегистрированы и работают.
Проблема, с которой мы сталкиваемся, заключается в том, что при просмотре формы покупки подписки переднего плана цена неверна, и всякий раз, когда вы выбираете вариант, появляется сообщение об ошибке: «Извините, этот продукт недоступен. Выберите другую комбинацию».
Подписка на продукт работает как положено после нажатия «Обновить» в админке. Есть идеи, как решить эту проблему?
Спасибо Энди
Вам, вероятно, нужно активировать переменную синхронизацию продукта.
$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
мета.
Спасибо всем за помощь. Оказывается, это довольно просто исправить …
Плагин подписок не показывает _price
а также _regular_price
мета-поля, кроме sync()
функция требует их. Как только я добавил эти два дополнительных поля в свой класс, функция sync () сработала.