Intereting Posts
Функция повторной обработки для подсчета количества сообщений типа post post post Домашняя страница перенаправляется на другую страницу – нет очевидной причины Фильтр post_row_actions не работает при обновлении после быстрого редактирования Помощь с вложением скриптов в нижнем колонтитуле после действия init WP 3.3 API подсказок? Одиночный мета-ключ с множественным мета-значением в сравнении Невозможно получить персонализированный тип сообщения в режиме Single и Single-custom-post-type Query 1 пользовательский тип сообщения, каждый день, в алфавитном порядке Добавление отображаемого изображения в сообщения, созданные плагином Multisite Ajax serialize return error ОШИБКА: страница параметров не найдена – Невозможно выяснить, почему :( htaccess https перенаправление с www на не-www Начать таксономию из пользовательских сообщений Как переименовать WP плагин? Как сделать enqueue js-файл в functions.php для инструкции if lt IE 9?

Как хранить или кэшировать пользовательские данные корзины покупок для сеанса каждого пользователя

Я разрабатываю корзину покупок, и я не хочу использовать какие-либо плагины, так как никто из них не может удовлетворить мои потребности. Поэтому я собираюсь создать свою собственную корзину покупок.

Мой вопрос: как хранить то, что пользователь добавил в свою корзину?

Я прочитал о wp_cache и о Transients API.

Они достаточно безопасны?

Есть ли другой лучший способ?

Solutions Collecting From Web of "Как хранить или кэшировать пользовательские данные корзины покупок для сеанса каждого пользователя"

Переходные процессы можно использовать, но вам нужно убедиться, что они не истекают раньше, чем вы хотите.

Я ответил на аналогичный вопрос с другой целью здесь , но я попытался сохранить немного другой ответ ниже автономного.

Вариант 1 – сеансы PHP

Я хранил тележки в PHP-сессии, что нормально, но иногда имеет несколько проблем. Поэтому, пока он работает, я рекомендую что-то более надежное.

Мой код плагина использует объект Basket. На крючке init я запускаю сеанс PHP, и если в сеансе есть сериализованный объект корзины, я несериализую его в глобальный, иначе я создаю новую корзину в глобальную.

На крючке shutdown я сериализую свой объект в сеанс.

 function setup_session() { global $Basket; session_start(); if (isset($_SESSION['basket'])) { $Basket = unserialize($_SESSION['basket']); } else { $Basket = new Basket(); } $Basket->do_actions(); // my own hooks to allow me to add housekeeping code without messing with my core codde } function save_session() { global $Basket; if (isset($Basket)) { $_SESSION['basket'] = serialize($Basket); } } add_action( 'init', 'setup_session' ); add_action( 'shutdown', 'save_session' ); // works even when redirecting away from a page 

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

Вариант 2 – лучшие сеансы

Здесь есть WP Session framework, написанный Эриком Манном и хорошо объясненный Пиппином, который использует его в своем известном плагине Easy Digital Downloads. Вы используете глобальный $ wp_session точно так же, как и $ _SESSION, но также есть вспомогательные функции для управления сеансами. Это использует переходные процессы WP для хранения, но также правильно обрабатывает время истечения срока, чтобы ваши корзины не очищались слишком рано.

Я перейду к этому на своих сайтах, когда я хорошо посмотрю, как это работает для меня.

Мы стараемся не посылать вас, следуя другим ссылкам в ответах здесь, поскольку они могут не длиться, но вытащить их обоих здесь приведет к довольно длинному ответу.

Вариант 3 – Вход пользователя

Если вы не требуете, чтобы покупатели делали учетную запись, то этот подход не для вас, если вы не хотите кодировать концепцию анонимного пользователя, а затем конвертируете свою корзину в одну для зарегистрированного пользователя при создании своей учетной записи. Если вам требуются учетные записи пользователей, то это путь, по которому вы можете передать управление сеансом в встроенные логины пользователей WP. Затем в режиме init & shutdown вы можете несериализировать и сериализовать свою корзину в пользовательское мета-поле, которое будет сохраняться между сеансами входа в систему.

Хотя update_user_meta будет обрабатывать сериализацию для вас, помните об этой давней ошибке при попытке сохранить объект.