获取由另一个插件保存的所有选项

时间:2015-03-26 作者:Caio_V

我正在开发一个插件,它增加了从另一个插件导入/导出设置的可能性。但是,我无法访问该插件保存的选项ID。

是否可以通过特定插件保存所有选项?

我想要的是这样的:

get_plugin_options($pluginId); // returns all options ids in a array or similar
我知道只要看看插件代码并写下选项名称就可以了。。。但硬编码选项名称并不好。

谢谢

3 个回复
SO网友:Amanda Giles

您最好的选择可能是将所有名称复制到插件中以用于检索。当然,当插件更新时,这可能会改变。当使用update\\u option()将选项保存在数据库中时,没有迹象表明它们来自哪个插件,存储在任何地方。但是,如果所有选项都使用特定前缀,则可以构造一个SQL查询,根据该前缀从选项表中提取它们。

例如,如果插件的所有选项的前缀为“abcd\\u0”,则可以使用如下查询:

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

SO网友:kovshenin

您无法获取插件已保存的选项上的数据,但您可以做的是监视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扔到巴士下面,但这里有一个我的错误响应示例。日志:

[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选项的罪魁祸首,然而,插件肯定不拥有该选项。

SO网友:Howdy_McGee

我认为这是不可能的,也不存在一个通用函数。无论何时添加选项,都可以通过添加option_nameoption_value - add_option().

<?php add_option( $option, $value, $deprecated, $autoload ); ?>
因此,每当插件向数据库中添加选项时,它们都会使用该函数,并且通常会在选项名称前面加上插件的相关内容wpseo_option_namewoocommerce_option_name 然后是任何选项。只有开发人员和他们的文档记录他们创建的选项,WordPress并没有记录。它只是将它们与其他插件、用户和WordPress本身创建的所有其他选项结合在一起。

您必须手动找出他们使用的所有选项名称,如果他们使用前缀,则必须循环查看他们的每个选项:$prefix_$option_name.

结束

相关推荐

Options for an SEO gallery?

我目前使用的是我喜欢的标准Wordpress图库,因为我的很多访问者在搜索了一些包含在图像描述中的文本后,通过谷歌找到了我。很明显,它以这样一种方式呈现了图库,文本被视为非常突出,我的许多访问者都通过图库进入。问题是gallery只支持纵向,而我还需要一些东西来显示横向中的图像(以避免边缘裁剪)。我发现一些允许两种方向的画廊很难将图像放在屏幕上,使它们看起来很好。我喜欢的最好的例子是Flickr,其中图像以俄罗斯方块的形式显示,但显然不允许在其下方发表评论。我完全有能力在wordpress插件中寻找一个好