Вопрос или проблема
Мне нужно предоставить список всех параметров, установленных через плагины и т. д., для удаленных вызовов. Есть плагин WP API Options, но он едва справляется с этой задачей.
Существует два возможных способа (известных мне) получить список всех параметров, установленных в блоге/на сайте:
-
Используйте
$wpdb
, чтобы выполнить запрос следующим образом:$option_names = $wpdb->get_col( "SELECT DISTINCT option_name FROM
$wpdb->options WHERE option_name NOT LIKE '_transient_%'" ); -
Используйте
wp_load_alloptions()
Какой из этих двух способов будет лучшим для получения всех параметров? Есть ли более чистый способ, чем любой из этих двух?
Правка: В идеальном мире мне бы хотелось использовать встроенную функцию для этого, вместо того чтобы писать запросы MySql. Также под всеми параметрами я подразумеваю любые параметры, установленные плагином с использованием функций add_option
или update_option
.
Я считаю, что всегда лучше использовать API, функции WP в этом контексте. Функция wp_load_alloptions()
поддерживается, и пользовательский выбор должен всегда тестироваться и поддерживаться. Также функция использует кеш, если установка это поддерживает. Это хороший момент для производительности.
Функция также поддерживает установку Multisite, возможно, это также является положительным моментом для усилий по поддержке.
Но функция не имеет фильтров для улучшения SQL-запроса или вывода. Вот в чем проблема: вы должны фильтровать после возвращенных значений.
Существует решение для запроса всех параметров, которые могут быть установлены плагином, если это зарегистрированные настройки.
Я предполагаю, что вы регистрируете настройки следующим образом:
register_setting( 'plugin-settings-group', 'plugin_option_1' );
register_setting( 'plugin-settings-group', 'plugin_option_2' );
Тогда вы можете использовать следующую функцию:
/**
* Получить все имена параметров плагина
* @return array
*/
function wp_nq2vjrn_get_all_plugin_option_name() {
global $wp_registered_settings;
$plugin_settings = array_filter( $wp_registered_settings, function ( $setting ) {
return 'plugin-settings-group' == $setting['group'];
} );
return array_keys( $plugin_settings );
}
Функция возвращает имена параметров, которые хранятся в массиве, поэтому я использую функцию array_keys()
.
Большое преимущество этого типа запроса заключается в том, что вы можете не только получить имя параметра, но также иметь доступ к другим параметрам настройки, таким как type
или description
. В этом случае используйте return $plugin_settings;
, например:
/**
* Получить все параметры плагина
* @return array
*/
function wp_nq2vjrn_get_all_plugin_settings() {
global $wp_registered_settings;
$plugin_settings = array_filter( $wp_registered_settings, function ( $setting ) {
return 'plugin-settings-group' == $setting['group'];
} );
return $plugin_settings;
}
Ответ или решение
Как получить список всех настроек плагина в WordPress: лучший подход
Если перед вами стоит задача предоставить список всех параметров, установленных через плагины в WordPress, вы, вероятно, столкнетесь с несколькими способами добиться этого. Рассмотрим наиболее эффективные из них, а также предложим более оптимизированные решения.
1. Использование $wpdb
для выполнения SQL-запроса
Первый вариант использования глобального объекта $wpdb
для выполнения SQL-запроса:
$option_names = $wpdb->get_col( "SELECT DISTINCT option_name FROM $wpdb->options WHERE option_name NOT LIKE '_transient_%'" );
Этот метод предлагает прямой доступ к базе данных и позволяет выбирать параметры, которые не являются временными. Однако, несмотря на свою эффективность, этот подход требует поддержки, так как он зависит от структуры базы данных, которая может измениться в будущем.
2. Использование функции wp_load_alloptions()
Другой вариант заключается в использовании функции wp_load_alloptions()
, которая загружает все параметры с кэшированием:
$all_options = wp_load_alloptions();
Эта функция имеет несколько преимуществ. Она кэширует результаты, что может улучшить производительность, особенно на больших сайтах. Также эта функция поддерживает мультисайтовые установки, что важно при работе с сетью сайтов.
Однако в данной функции отсутствует возможность фильтрации результатов, что может затруднить выбор только тех опций, которые вас интересуют.
Лучшее решение: использование зарегистрированных настроек
Если параметры вашего плагина зарегистрированы, вы можете воспользоваться более современным и чистым подходом, используя следующие функции:
/**
* Получение всех имен опций плагина
* @return array
*/
function wp_get_all_plugin_option_names() {
global $wp_registered_settings;
$plugin_settings = array_filter( $wp_registered_settings, function ( $setting ) {
return 'plugin-settings-group' == $setting['group'];
} );
return array_keys( $plugin_settings );
}
Этот метод позволяет вам получить все имена опций, зарегистрированных плагином, и, что важно, указывать дополнительные параметры настроек, такие как type
или description
.
Если вам интересно не только имена опций, но и их параметры, вы можете использовать такой модифицированный подход:
/**
* Получение всех настроек плагина
* @return array
*/
function wp_get_all_plugin_settings() {
global $wp_registered_settings;
$plugin_settings = array_filter( $wp_registered_settings, function ( $setting ) {
return 'plugin-settings-group' == $setting['group'];
} );
return $plugin_settings;
}
Заключение
Исходя из приведенного анализа, использование функции wp_load_alloptions()
и обращение к глобальному массиву $wp_registered_settings
представляют собой наиболее оптимальные способы получения всех параметров, установленных через плагины в WordPress. Эти методы позволяют избежать прямого взаимодействия с базой данных, что делает ваш код более устойчивым и легко поддерживаемым в будущем. Всегда лучше использовать встроенные функции WordPress, так как это гарантирует более высокую степень совместимости с обновлениями и изменениями в ядре платформы.