Конфигурация плагина по умолчанию для переопределения wp_options?

Вопрос или проблема

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

Можно ли создать конфигурационный файл, который бы переопределял любые wp_options, установленные для плагинов?

Вы можете проверить, какие параметры они добавляют (посмотрите исходный код), а затем просто написать такую функцию:

/*
Plugin Name:    Mother of all plugins
Plugin URI:  http://wordpress.org/extend/plugins/
Description:    Предоставляет var <code>$all_plugin_options;</code> для доступа ко всем предопределенным параметрам плагинов
Author:      Franz Josef Kaiser
Author URI:     http://say-hello-code.com
Version:        0.1
License:        GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/

// Шаблонный тег
function get_all_plugin_options() 
{
    // Сначала вызываем класс
    $class = new MotherOfAllPlugins;
    $data = $class->predefined_plugin_options();
    return $data;
}

if ( ! class_exists('MotherOfAllPlugins') )
{

class MotherOfAllPlugins
{
    protected $plugin_options;

    public function __construct( $plugin_options )
    {
      // по умолчанию
      $default_options = array(
         'plugin_a' => array(
             'deprecated' => ''
            ,'name'       => 'value'
            ,'key'        => 'value'
          )
        ,'plugin_b' => array(
             'deprecated' => ''
            ,'name'       => 'value'
            ,'key'        => 'value'
          )
      );
      // Теперь перезаписываем 
      $this->plugin_options = array_merge( $default_options, $plugin_options );

      add_action( 'init', 'predefined_plugin_options' );
    }

    function predefined_plugin_options() 
    {

      // Устанавливаем флаг, если мы уже это сделали
      // _ИЗМЕНЕНИЕ #1:_ Это устанавливает параметр в таблице wp_options, содержащую TRUE, если предопределенные параметры вашего плагина уже присутствуют в БД
      if ( !get_option( 'predef_plugins_setup' ) === TRUE )
         add_option( 'predef_plugins_setup', TRUE );

      if ( !get_option( 'predef_plugins_setup' ) === TRUE )
      {
         // Добавляем параметры для плагинов
         foreach ( $plugin_options as $plugin => $options ) 
         {
            add_option( $plugin, $options, $options['deprecated'], 'yes' );
         }
      }

      // _ИЗМЕНЕНИЕ #2:_ возвращаем начальный массив для использования в глобальной области
      return $plugin_options;
    }

} // КОНЕЦ Класса MotherOfAllPlugins

} // endif;

Чтобы получить параметры вашего плагина в вашей теме:

// Теперь берем возвращаемое значение & добавляем его в глобальную область для дальнейшего использования.
// Таким образом мы можем легко получить доступ ко всем параметрам без обращения к БД.
// Теперь вы можете получить доступ к этим значениям из любой части вашей темы.
$all_plugin_options = get_all_plugin_options();

Будьте внимательны, чтобы действительно добавить параметры точно так же, как это делает плагин. В противном случае ничего не будет работать.

Вы могли бы поместить что-то подобное в ваш файл function.php в теме.
Таким образом, это будет выполняться только один раз (при активации темы).

add_option('my_initial_options', false);

if ( get_option('my_initial_options') == false ){
    addmyOptions();
    update_option( 'my_initial_options', true, '', 'yes' );
}

function addmyOptions(){

update_option("posts_per_page", 1);
update_option( 'show_on_front', 'page' );

}

Не уверен, возможно ли такое, но в качестве обходного пути можно использовать фиктивную базу данных стандартной установки WP с конфигурацией всех этих плагинов. Теперь каждый раз, когда вам нужно настроить другой сайт, вставьте эту базу данных и отредактируйте URL домашней страницы и сайта.

Посмотрите на хук pre_option_{option}.
https://developer.wordpress.org/reference/hooks/pre_option_option/

<?php
// Принудительно установить название блога (Название сайта) независимо от того, что указано в Настройки > Общие
function myslug_pre_filter_blogname( $pre_option ) {
    return 'My Awesome Website';
}
add_filter( 'pre_option_blogname', 'myslug_pre_filter_blogname' );

// Ваш сайт особенный. Он не "Просто еще один" чего-либо.
function myslug_pre_filter_blogdescription( $pre_option ) {
    return '';
}
add_filter( 'pre_option_blogdescription', 'myslug_pre_filter_blogdescription' );

Ответ или решение

Для опытного IT-специалиста, работающего с WordPress, задача упрощения настройки плагинов через изменение параметров по умолчанию в таблице wp_options является достаточно распространенной и требует внимания к деталям. Это не только улучшает эффективность, но и способствует единообразию настроек на всех новых сайтах. Давайте разберем, как можно решить данную задачу, используя принцип TEA (Theory, Example, Application).

Теория

В WordPress параметры плагинов хранятся в таблице wp_options базы данных. Каждый плагин может добавлять свои собственные параметры, которые записываются в эту таблицу. Учитывая, что каждый раз, когда создается новый сайт, необходимо вручную задавать эти параметры, автоматизация процесса становится задачей первостепенной важности.

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

  1. Постоянная перегрузка значений: Использование фильтров для изменения значений опций непосредственно перед считыванием их из базы данных.
  2. Первоначальная настройка: Установка значений по умолчанию один раз при первой активации темы или плагина.
  3. Шаблон базы данных: Использование заранее настроенной копии базы данных, которая содержит все необходимые параметры и конфигурации.

Пример

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

// Пример функции для перезаписи опции blogname (название сайта) на сайте WordPress
function my_override_blogname( $pre_option ) {
    return 'Мое Удивительное Сайт';
}
add_filter( 'pre_option_blogname', 'my_override_blogname' );

function my_override_blogdescription( $pre_option ) {
    return 'Не просто еще один сайт на WordPress';
}
add_filter( 'pre_option_blogdescription', 'my_override_blogdescription' );

Эти фильтры используют хуки pre_option_{option} для перехвата и изменения значения параметра непосредственно перед тем, как WordPress обратится к базе данных для его получения. Это позволяет гарантировать, что нужные вам параметры всегда будут иметь заданные значения.

Применение

Реализация такого подхода может быть довольно сложной, особенно если речь идет о множестве плагинов с разными наборами параметров. Однако этот метод очень эффективен, особенно если в каждом новом проекте требуется набор предопределённых настроек.

Вот несколько шагов для успешной реализации:

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

  2. Создайте функцию для каждого параметра: Используйте хук pre_option_{option_name} для перезаписи значений.

  3. Организация настроек: Создайте центральный плагин или добавьте код в файл functions.php активной темы для их единого хранения и управления.

  4. Тестирование: На тестовых сайтах убедитесь, что изменения работают как ожидается и не привели к конфликта с другими частями сайта.

  5. Обслуживание и обновления: Регулярно пересматривайте и обновляйте настройки, чтобы они оставались актуальными.

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

Оцените материал
Добавить комментарий

Капча загружается...