WordPress:检查插件是否安装

问题描述:

我想检查一下Yoast SEO是否安装在WordPress中。我在我的测试环境中启动了Yoast SEO,但没有解决问题。WordPress:检查插件是否安装

WP-SEO-main.php Yoast的,还有该行第16行:

define('WPSEO_VERSION', '3.4'); 

所以我想,这是一个好线,检查是否安装Yoast和运行,因此我做了:

if (defined('WPSEO_VERSION')) { 
    echo '<script>alert("Yes, defined");</script>'; 
} else { 
    echo '<script>alert("No, undefined");</script>'; 
} 

但它给了我“不,未定义”。多么奇怪,因为它应该被定义。

有人有想法吗?我完全没有想法。

+0

尝试看看插件是否处于活动状态。这里有一篇很好的文章,它以多种方式检查:http://queryloop.com/detect-wordpress-plugin-is-active/ –

+0

请牢记wordpress.stackexchange.com以及您的问题可能更适合 – YakovL

+0

@YakovL是的,但我认为这是更多的PHP相关的事情,但事实证明,它有它的WordPress功能。 –

检查插件是否被激活。

注意:在wp-admin/includes/plugin.php中定义,因此只能在管理页面中使用,并且对此函数的任何引用都必须挂钩到admin_init或更高版本的操作。如果要使用此功能从模板中,您将需要手动要求plugin.php,一个例子是下面 使用

Admin area 
<?php 
/** 
* Detect plugin. For use in Admin area only. 
*/ 
if (is_plugin_active('plugin-directory/plugin-file.php')) { 
    //plugin is activated 
} 


Front end 
<?php 
/** 
* Detect plugin. For use on Front End only. 
*/ 
include_once(ABSPATH . 'wp-admin/includes/plugin.php'); 

// check for plugin using plugin name 
if (is_plugin_active('plugin-directory/plugin-file.php')) { 
    //plugin is activated 
} 

Reference Page

或者无需额外包裹,前端或后端:

if(in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))){ 
    // do stuff only if Yoast is installed and active 
} 

适用于任何插件,只是看着你plugins文件夹为你的目标:plugin-folder/plugin-index-name.php其中后者shuld居民插件细节在文件的顶部。

受Jonas Lundman的回答的启发,我写了这个来处理Yoast溢价活跃时的情况。

private function isYoastActive(){ 
    $active_plugins = apply_filters('active_plugins', get_option('active_plugins')); 
    foreach($active_plugins as $plugin){ 
     if(strpos($plugin, 'wp-seo')){ 
      return true; 
     } 
    } 
    return false; 
}