Получить все варианты, сохраненные другим плагином

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

Можно ли получить все опции, сохраненные определенным подключаемым модулем?

Я бы хотел что-то вроде этого:

get_plugin_options($pluginId); // returns all options ids in a array or similar 

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

Благодаря!

Solutions Collecting From Web of "Получить все варианты, сохраненные другим плагином"

Ваш лучший вариант, скорее всего, скопирует все имена в ваш плагин для использования для извлечения. Конечно, это может измениться при обновлении плагина. Когда параметры сохраняются в базе данных с помощью update_option (), нет никаких указаний о том, какой плагин они пришли, который хранится где угодно. Если все параметры используют конкретный префикс, вы можете построить SQL-запрос, чтобы вытащить их из таблицы опций на основе этого префикса.

Например, если префикс для всех параметров плагина был «abcd_», вы могли бы использовать такой запрос:

 select * from $wpdb->options where option_name like 'abcd_%' 

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

 function gimme_your_options( $option_name ) { $blame = 'core'; $debug_backtrace = debug_backtrace(); foreach ( $debug_backtrace as $call ) { if ( empty( $call['file'] ) ) continue; if ( ! preg_match( '#wp-content/((?:(?:mu-)?plugins|themes)/.+)#i', $call['file'], $matches ) ) continue; $blame = $matches[1]; break; } error_log( sprintf( 'blame %s for %s', $blame, $option_name ) ); } add_action( 'add_option', 'gimme_your_options' ); add_action( 'update_option', 'gimme_your_options' ); 

Не бросать Jetpack под автобус, но вот пример ответа в моей error.log:

 [23-Mar-2015 05:39:27 UTC] blame core for active_plugins [23-Mar-2015 05:39:27 UTC] blame core for _transient_doing_cron [23-Mar-2015 05:39:27 UTC] blame core for cron [23-Mar-2015 05:39:27 UTC] blame core for cron [23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack.php for _transient_timeout_jetpack_https_test [23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack.php for _transient_jetpack_https_test [23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack-options.php for jetpack_options 

Надеюсь, это поможет.

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

Я не думаю, что это возможно, или существует универсальная функция для этого. Всякий раз, когда вы добавляете параметр, вы делаете это, добавляя option_name и option_valueadd_option() .

 <?php add_option( $option, $value, $deprecated, $autoload ); ?> 

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

Вам нужно вручную узнать все имена опций, которые они используют, если они используют префикс и циклически перебирают каждый из своих опций: $prefix_$option_name .