Вопрос или проблема
У меня есть несколько плагинов, для которых я всегда настраиваю конфигурацию одинаково. Каждый раз, когда я создаю новый сайт, я устанавливаю те же плагины, и нужно столько же времени, чтобы настроить их.
Можно ли создать конфигурационный файл, который бы переопределял любые 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
базы данных. Каждый плагин может добавлять свои собственные параметры, которые записываются в эту таблицу. Учитывая, что каждый раз, когда создается новый сайт, необходимо вручную задавать эти параметры, автоматизация процесса становится задачей первостепенной важности.
Основная идея состоит в том, чтобы создать механизм, который автоматически загружал бы предопределенные значения параметров для каждого устанавливаемого плагина. Возможные подходы к решению этой задачи включают:
- Постоянная перегрузка значений: Использование фильтров для изменения значений опций непосредственно перед считыванием их из базы данных.
- Первоначальная настройка: Установка значений по умолчанию один раз при первой активации темы или плагина.
- Шаблон базы данных: Использование заранее настроенной копии базы данных, которая содержит все необходимые параметры и конфигурации.
Пример
Рассмотрим, как можно реализовать первый подход — постоянную перегрузку значений опций с использованием фильтров 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 обратится к базе данных для его получения. Это позволяет гарантировать, что нужные вам параметры всегда будут иметь заданные значения.
Применение
Реализация такого подхода может быть довольно сложной, особенно если речь идет о множестве плагинов с разными наборами параметров. Однако этот метод очень эффективен, особенно если в каждом новом проекте требуется набор предопределённых настроек.
Вот несколько шагов для успешной реализации:
-
Анализируйте коды плагинов: Определите, какие параметры они добавляют в
wp_options
. Этот шаг необходим, чтобы понять структуру данных и их названия. -
Создайте функцию для каждого параметра: Используйте хук
pre_option_{option_name}
для перезаписи значений. -
Организация настроек: Создайте центральный плагин или добавьте код в файл
functions.php
активной темы для их единого хранения и управления. -
Тестирование: На тестовых сайтах убедитесь, что изменения работают как ожидается и не привели к конфликта с другими частями сайта.
-
Обслуживание и обновления: Регулярно пересматривайте и обновляйте настройки, чтобы они оставались актуальными.
Таким образом, разумное использование фильтров и понимание внутренней структуры WordPress позволяют значительно сократить время, необходимое для настройки плагинов, и поднять уровень автоматизации в рабочем процессе. Каждое небольшое улучшение может привести к значительной экономии времени и ресурсов на больших масштабах.