从块编辑器检查活动的WordPress插件

时间:2021-06-30 作者:Bula

StackExchange社区,

我正在研究一些块编辑器格式和块,并想添加一个检查,看看是否安装了某个插件。这将特定于WordPress的后端管理区域。例如:

if ( isPluginActive(\'plugin-name\') ) {
 console.log(\'Plugin is active.\')
}
我知道我可以将PHP中的数据本地化到脚本中,但如果可以的话,最好使用任何内置函数或包。我确实遇到了getPlugins() 方法,但这似乎是指gutenberg插件,而不是WordPress插件。

更新:我尝试使用apiFetch,并能够检索已安装插件的列表以及每个插件的状态。

const isPluginActive = () => {
    apiFetch( { path: \'/wp/v2/plugins\' } ).then( ( plugins ) => {
        plugins.forEach( ( plugin ) => {
            const name = plugin.plugin
            const status = plugin.status
            
            if ( name === \'plugin-name/plugin-name\' && status === \'active\') {
                return true
            }
        })
    })
}
然而,我不确定如何使用它作为变量或函数返回布尔响应,我可以在条件语句中使用它。它当前返回未定义。

1 个回复
最合适的回答,由SO网友:bosco 整理而成

据我所知,古腾堡的任何数据存储都没有为此目的公开选择器。如果有的话,我会在core. 如果古腾堡的体验扩展到插件管理屏幕,我想我们会看到这样的事情实现。

目前,如果相关用户activate_plugins 功能,您可以使用@wordpress/api-fetch 包装:

import apiFetch from \'@wordpress/api-fetch\';

// ...
const plugins = await apiFetch( { path: \'/wp/v2/plugins\' } );
请求生成的对象将具有the fields described by the endpoint\'s schema, 包括主文件的相对路径、名称、版本号和活动/非活动状态。

可以修改核心REST端点的权限检查回调,以便向更多用户公开此功能,但这不是很直接,通常是不可取的。如果需要自定义端点或控制器的行为,那么创建新的端点或控制器可能是更好的解决方案。