php 如何检查WordPress插件是否已安装并激活?

c90pui9n  于 2022-12-17  发布在  PHP
关注(0)|答案(7)|浏览(198)

我想检查Yoast SEO是否安装在WordPress中。我已经在我的测试环境中激活了Yoast SEO,但它不工作。
在Yoast的wp-seo-main.php中,第16行有这样一行:

define( 'WPSEO_VERSION', '3.4' );

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

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

但它给了我“不,未定义”,多么奇怪,因为它应该被定义。
有人有主意吗?我完全没主意了。

ukqbszuj

ukqbszuj1#

或无额外内含物,前端或后端:

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,后者应将插件详细信息驻留在文件顶部。
请检查文档reference

f4t66c6m

f4t66c6m2#

灵感来自乔纳斯伦德曼的回答,我写了这也处理时,优斯特保费是活跃的。

function is_yoast_active() {
    $active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );

    foreach ( $active_plugins as $plugin ) {
        if ( strpos( $plugin, 'wp-seo' ) ) {
            return true;
        }
    }

    return false;
}
gk7wooem

gk7wooem3#

$all_plugins = get_plugins();

//print_r( $all_plugins );

if( array_key_exists( 'woolementor/woolementor.php', $all_plugins ) ){

     //do something
}
e5nqia27

e5nqia274#

感谢所有其他人做了一个很好的工作到目前为止!但这个问题也是关于检查是否安装了插件和所有您的答案只是关于检查是否插件是活动的。
所以我去了我的Playground,并制定了一个正确的检查,我想通过使用WP已经提供的功能向您展示。

// Check if needed functions exists - if not, require them
if ( ! function_exists( 'get_plugins' ) || ! function_exists( 'is_plugin_active' ) ) {
    require_once ABSPATH . 'wp-admin/includes/plugin.php';
}

/**
 * Checks if Yoast SEO is installed
 *
 * @return bool
 */
function is_wp_seo_installed(): bool {
    if ( check_plugin_installed( 'wordpress-seo/wp-seo.php' ) ) {
        return true;
    }

    return false;
}

/**
 * Check if Yoast SEO is activated
 *
 * @return bool
 */
function is_wp_seo_active(): bool {
    if ( check_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
        return true;
    }

    return false;
}

/**
 * Check if plugin is installed by getting all plugins from the plugins dir
 *
 * @param $plugin_slug
 *
 * @return bool
 */
function check_plugin_installed( $plugin_slug ): bool {
    $installed_plugins = get_plugins();

    return array_key_exists( $plugin_slug, $installed_plugins ) || in_array( $plugin_slug, $installed_plugins, true );
}

/**
 * Check if plugin is installed
 *
 * @param string $plugin_slug
 *
 * @return bool
 */
function check_plugin_active( $plugin_slug ): bool {
    if ( is_plugin_active( $plugin_slug ) ) {
        return true;
    }

    return false;
}

正如您所看到的,我编写了两个独立的函数来检查Yoast SEO是否已安装并处于活动状态,因此我只需要调用它并检查返回参数:

$installed = is_wp_seo_installed();
$active    = is_wp_seo_active();

if ( $installed && $active ) {
    echo 'WP SEO is installed and active!';
} else {
    echo 'WP SEO is not installed or active!';
}

但是如果你想跳过这两个额外的函数,你可以直接调用这两个检查函数:

$installed = check_plugin_installed( 'wordpress-seo/wp-seo.php' );
$active    = check_plugin_active( 'wordpress-seo/wp-seo.php' );

if ( $installed && $active ) {
    echo 'Yoast SEO is installed and active!';
} else {
    echo 'Yoast SEO is not installed or active!';
}

我希望这能帮助你做一个好的安装和活动检查!

1tuwyuhd

1tuwyuhd5#

使用以下代码:

<?php include_once ABSPATH . 'wp-admin/includes/plugin.php'; ?>
 <?php if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) :

      //do staff

 <?php endif; ?>
7qhs6swi

7qhs6swi6#

这对我很有效。

if(count(
        preg_grep(
            '/^wordpress-seo.*\/wp-seo.php$/',
            apply_filters('active_plugins', get_option('active_plugins'))
        )
    ) != 0
){
    // Plugin activated
}
mefy6pfw

mefy6pfw7#

选中此选项,获取所有活动插件的名称;

$callback = function($key){
    $key = explode('/', $key);
    return $key[0];                                        
}

$active_plugins = array_map($callback, get_option( 'active_plugins' ) );

相关问题