如何区分插件是未安装还是处于非活动状态

时间:2018-11-29 作者:rkoller

我尝试应用一个检查,以确定插件是否处于非活动状态或根本没有安装在插件目录中。当我进行测试时,我会检查是否安装了一个插件,但如屏幕截图所示,该插件未激活。

VSCode screen showing sidebar with the installed plugin and the editor screen with the code from underneath in the question

检查非活动部件是否工作正常:

$isinactive = is_plugin_inactive( \'advanced-custom-fields/acf.php\' );
var_dump( $isinactive );
在检查插件是否已实际安装并且是否存在于插件目录中时,不会。首先,我生成主插件文件的路径:

$pathpluginurl = plugins_url( \'advanced-custom-fields/acf.php\' );
var_dump($pathpluginurl);
然后检查该文件是否存在:

$isinstalled = file_exists( $pathpluginurl );
var_dump($isinstalled);
然后检查特定文件是否不存在:

if ( ! file_exists( $pathpluginurl ) ) {
    echo "File does not exist";
} else {
    echo "File exists";
}
输出:

true //true for that the plugin is not active
http://mysandbox.test/wp-content/plugins/advanced-custom-fields/acf.php
false  // false for that the acf.php file actually exists

file not exists
我不明白为什么file\\u exists没有陈述事实,相反地说插件不存在?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

file_exists 需要路径,而不是URL。要获取任意插件的路径,您需要使用WP_PLUGIN_DIR:

$pathpluginurl = WP_PLUGIN_DIR . \'/advanced-custom-fields/acf.php\';

$isinstalled = file_exists( $pathpluginurl );

SO网友:Greg Winiarski

您正在URL上使用file\\u exists()函数,而不是在文件路径上,这将不起作用(在大多数情况下)。

而不是

$pathpluginurl = plugins_url( \'advanced-custom-fields/acf.php\' );

您应该执行以下操作以获取绝对文件路径

$pathpluginurl = ABSPATH . \'wp-content/plugins/advanced-custom-fields/acf.php\';

结束

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请