Здравствуйте. Есть такая задача. Каждую пятницу и до воскресенья мне нужно в одной категории автоматом устанавливать скидки на товары. В воскресенье, соответственно, скидки должны пропадать. У меня такой вопрос, насколько плох или хорош мой вариант, без использования cron(не имел дел, надеюсь правильно понимаю, что он позволяет сделать). Так вот, у товаров я создаю доп поле для цены со скидкой, которая должна устанавливаться в нужное мне время. Затем первый пользователь, который зайдет в пятницу, запустит скрипт, который применит эту цену в sale_price и запишет в транзиентный кэш(который в бд) инфу, что мол цены установлены и больше не нужно этого делать, на 2 дня. И, соотвественно, в воскресенье будет то же самое, только цены удалятся из sale_price и запишется другая инфа, что не нужно больше удалять скидку. Надеюсь понятно изложил свою мысль)
а не легче сделать фичу с условием, типо если сегодня пятница и открыта спец категория, то выводим цену со скидкой?
чтобы не переписывать цены в бд?
тут конечно еще затык в том, что это условие нужно будет много где прописывать...
но Ваш вариант с запуском скрипта пользователем лучше не делать, т.к. предлопожим, что в категории 10к товаров, сколько времени у пользователя страница будет открываться?
а если в это время еще один пользователь зайдет на сайт, и у вас цены не успеют поменяться, то скрипт еще раз сработает, пока у вас "транзиентный кэш" не заполнился?
хотя если товаров мало, то можно еще подумать над этим вариантом, но я все же за cron
Проблема в том, что эти товары будут и в других категориях. А значит скидки будут и там тоже. Но на неделе их надо убирать. Товаров немного. Около 500. При этом в категории от силы пара десятков будет, а мне нужно только в этой категории цены менять. Больше вряд ли. А по поводу второго пользователя - ну пусть второй раз цены поставятся - это ведь не страшно)
Muvka, ваше решение противоречит гражданскому кодексу. При публичной оферте (даже если вы это пытаетесь отрицать на страницах вашего ресурса) продавец обязан продать товар по той цене, которая указана.
Александр, Так эта цена и будет указана. В чем проблема? Она будет подставляться скриптом в поле sale_price. Оно отвечает за цену по скидке в woocommerce.
Ваш план плохо масштабируется - в вопросе неизвестно сколько будет выполняться ваш запрос, и будут ли тормоза у пользователя. И что будет через месяц, через год, если товаров станет больше.
В то время как крон вы можете поставить в то время, когда не выполняются бэкапы, когда на сервере минимальная активность, и выполнение может быть контролируемым, с логированием, с расширенным функционалом.
Сама идея обновлять данные при активности какого-либо пользователя - вполне нормальная, просто не для вашего случая. Она для случая, когда нужно обновлять небольшой блок данных.
P.S. А разобраться с крон в любом случае необходимо - это стандартный и популярный инструмент. Разобравшись с крон вы будете лучше понимать когда его использовать, а когда нет, а не отталкиваться от того, тут же разбираться надо.
Если честно не очень понял. В вашем случае придется перепиливать всю систему скидок Woocommerce? Мне надо, чтобы это были обычные скидки. В том числе и во фронте. И в корзине и в заказе.
Muvka, Допустим у вас есть цены и скидки на них которые должны срабатывать только в определеных днях. Ну вот, чтоб понять есть ли скидка сегодня, проверяете через подобную функцую, а далее пересчитываете цену в зависимости скидочна цена или нет. Я в целом так вижу это, но выбор конечно же за вами, ведь я без понятия какая у вас там логика.
А что если у вас товар "А", есть в категории для скидок и в обычной категории, а вы цену обновили в БД?
Оба варианта мне не нравятся. Но из двух предложенных вариантов, менее плохой с кроном. Разобраться с кроном и настроить его займет часа пол.
Если скидки одинаковы для всех товаров, тогда может есть смысл сделать скидку в корзине на все товары этой категории и инициировать ее только по выходным, а на сайте выкидывать сообщение, что сегодня скидка на товары такой категории
Тогда, крон не нужен, в базе ничего не меняется, список категорий масштабируется, список скидок для категорий масштабируется.