Где лучше дополнительно хранить текущие данные в wordpress?
На сайте с WooСommerce выбирается адрес на главной странице (то есть перед совершением покупок).
При выборе просто заполняется поля адреса текущего пользователя.
Нужно сделать вывод адреса на каждой странице WooСommerce.
Как лучше получать и дополнительно хранить это:
1)Для каждой страницы получать мета поле адреса пользователя (думаю будет большая нагрузка).
2)Или хранить адрес дополнительно где-то еще (в куках, сессиях (если это - то можно с примером по подробнее, я в этом новичок)).
Дополнительно:
Ответы:
Адрес авторизованного пользователя лучше хранить в базе. Нагрузка не большая, так как эта информация будет приходить вместе с данными текущего авторизованного пользователя.
Адрес анонимного можно хранить в cookies / local storage
- Адреса итак хранятся в базе - вопрос в том чтобы получать выбранный адрес на каждой странице:
1) получать мето поле адреса пользователя (думаю будет большая нагрузка).
2) получать из дополнительного места (куки например) - но здесь хотелось бы увидеть пример, так как я в этом новичок - 1)
(думаю будет большая нагрузка).
Почему Вы так думаете? И что Вы считаете большой нагрузкой?
2)
хотелось бы увидеть пример
$address = $_COOKIE['address'];
https://www.php.net/manual/ru/reserved.variables.c... - nokimaro, YBB, Читала доклад с водмитаба , где говорилось что все функции связанные с мета полями очень медленны и использовать их нужно ограниченно. По этому и задаю вопрос как лучше дополнительно хранить и получать.
Сейчас использую кастомное поле (новое, стандарт не хватает):
получить поле wp_get_current_user() get_user_meta()
запись поля update_user_meta() -
Читала доклад с водкаба , где говорилось что все функции связанные с мета полями очень медленны
Либо в докладе бред, либо Вы неправильно поняли. Медленно работают выборки и сортировки с использованием метаданных. Функция get_user_meta() читает данные из кэш-памяти, куда все метаданные текущего юзера попадают на этапе инициализации движка, то есть задержка минимальная.
- YBB, спасибо за объяснение
Все данные пользователей и так хранятся в базе. Для этого ничего сочинять не нужно.
Нужно сделать вывод адреса на каждой странице WooСommerce.
Как лучше получать
Получать лучше стандартными функциями WP/WC. Но это уже совершено другой вопрос.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для авторизованного пользователя адрес лучше хранить в базе в стандартных полях WooCommerce: billing/shipping meta пользователя. Получение этих данных на каждой странице не создаёт большой нагрузки, потому что WordPress и WooCommerce всё равно загружают текущего пользователя, а объект customer кэшируется в рамках запроса.
Например, вывести выбранный адрес можно так:
$customer = WC()->customer; if ($customer) { $city = $customer->get_shipping_city(); $address = $customer->get_shipping_address_1(); echo esc_html(trim($city . ', ' . $address, ', ')); }
Если адрес выбирается до покупки и пользователь авторизован, сохраняйте его в user meta или через методы WooCommerce customer. Так адрес будет доступен на всех страницах и не потеряется после закрытия браузера.
Для гостя лучше использовать сессию WooCommerce, а не обычный PHP
$_SESSION. WooCommerce уже умеет хранить временные данные покупателя:WC()->session->set('selected_address', [ 'city' => sanitize_text_field($_POST['city']), 'street' => sanitize_text_field($_POST['street']), ]); $address = WC()->session->get('selected_address');
Cookies или localStorage можно использовать только как вспомогательный слой для интерфейса. Не доверяйте им при расчёте доставки и стоимости заказа, потому что пользователь может изменить данные в браузере.
Итого: авторизованный пользователь — база/user meta/Woo customer; гость — WooCommerce session; localStorage — только для удобства UI. Это нормальная схема и по нагрузке, и по безопасности.