✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Использование WordPress Transients вместо файлов cookie?

33

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

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

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

Использование WordPress Transients вместо файлов cookie?

Чтобы имитировать природу файлов cookie и срок их действия, использование переходных процессов WordPress через API Transients с соответствующим названием может быть жизнеспособным решением.

Использование переходных процессов WordPress

Если вы знакомы с любым из API метаданных, которые есть в WordPress, то вы, вероятно, знакомы с функциями, которые они используют. Сюда входят стандартные операции, такие как добавление, получение, обновление и удаление.

А с WordPress вы можете во многих местах упростить обновление, получение и удаление, потому что update сначала увидит, существует ли часть информации, и, если нет, добавит ее.

Проектирование интерфейса класса

Таким образом, интерфейс класса, обертывающего Transients API, можно сократить до:

  • установлен,
  • получить,
  • Удалить.

Где set заменяет add и update. Кроме того, хорошо иметь вспомогательные функции, такие как has, которые позволяют нам писать условные операторы в коде, который вызывает библиотеку.

Например, если вы хотите сделать что-то вроде «если это не имеет значения, то верните».

Таким образом, интерфейс для кода может выглядеть примерно так:

<?php
/**
 * A wrapper for the Transients API. Because using `setcookie` only works in the `init`
 * hook of WordPress, then we need a way to simulate it. That's what the purpose of this class
 * does.
 *
 * It will use the ID of the user who is currently logged in (or the PHP's get_current_user value if
 * they are not logged in).
 *
 * @author Tom McFarlin <tom@tommcfarlin.com>
 */
interface DataStore {
    /**
     * Determines if a transient value already exists identified with the incoming key.
     *
     * @param string $key The key used to identify the key in the database.
     *
     * @return bool       True if a transient exists; otherwise, false.
     */
    public function has( string $key );

    /**
     * Saves the specified value for 24 hours.
     *
     * @param string $key   The key used to identify the key in the database.
     * @param string $value The value to save for 24 hours.
     */
    public function set( string $key, string $value );

    /**
     * Retrieves the transient value from the database.
     *
     * @param string $key The key used to identify the key in the database.
     *
     * @return string     The value associated with the incoming transient.
     */
    public function get( string $key );

    /**
     * Deletes the transient data.
     *
     * @param string $key The key used to identify the key in the database.
     */
    public function delete( string $key );
}

Есть некоторые предостережения, которые следует учитывать при работе с подобным кодом. То есть как насчет аутентифицированных и неаутентифицированных пользователей?

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

Я могу рассказать об этом в следующем посте.

Слово предостережения

Однако следует помнить одну вещь: не стоит загрязнять таблицу параметров WordPress. И именно здесь хранятся переходные процессы.

Поэтому, если вы собираетесь использовать переходные процессы WordPress, убедитесь, что вы не добавляете массу значений в базу данных.

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

Источник записи: tommcfarlin.com

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