首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在特定时间自动激活和停用两个插件

在特定时间自动激活和停用两个插件
EN

WordPress Development用户
提问于 2022-08-05 09:20:14
回答 1查看 125关注 0票数 0

如何在特定时间自动激活和停用两个插件?

例如,

我希望“阿基塞特”插件只能在上午10点到晚上7点激活,而其他的“时代”则被停用。

"Yoast“插件只能在上午7点到10点激活,而”其他时报“则被停用。

注意:

比如阿基塞特和尤斯特·西奥,而不是真的。

2-省略这样一个事实,即除非站点被击中,否则function.php不会运行代码。这可能会导致一些潜在的失误。这里使用wp_schedule_event()的另一个答案是使用CRON,而不依赖于“外部”强制。

此代码在特定日期和插件中被激活和停用。

代码语言:javascript
运行
复制
$timestamp = time(); // Timestamp
$day       = date( 'D', $timestamp ); // Get day from timestamp
$active    = array( 'Mon', 'Wed', 'Fri', 'Sat' ); // Days plugin to be active
if ( in_array( $day, $active, true ) ) { // Yoast SEO is active
    activate_plugin( '/wordpress-seo/wp-seo.php' );
} else { // Yoast SEO is deactivated
    deactivate_plugins( '/wordpress-seo/wp-seo.php' );
}

我该怎么做呢?谢谢。

EN

回答 1

WordPress Development用户

发布于 2022-08-08 08:53:10

与其更新数据库,不如编写一个mu来拦截来自active_plugins选项的读取。

代码语言:javascript
运行
复制
function option_active_plugins_akismet_or_yoast( $plugins )
{
    if ( !defined('WP_ADMIN') ) {
        $hour = getdate()[ 'hours' ];
        if ( $hour >= 10 && $hour < 19 ) {
            $to_remove = 'wordpress-seo/wp-seo.php';
        } else {
            $to_remove = 'akismet/akismet.php';
        }
        $remove_index = array_search( $to_remove, $plugins );
        if ( $remove_index !== false ) {
            unset( $plugins[ $remove_index ] );
        }
    }
    return $plugins;
}
add_filter( 'option_active_plugins', 'option_active_plugins_akismet_or_yoast' );

这需要在插件加载循环之前进入一个中。这将在管理站点中同时保持活动状态,而且由于您在运行时正在执行此操作,因此当两者都处于活动状态时,不会出现任何重叠。无济于事的是,wp_get_active_and_valid_plugins()中没有可以使用的筛选器。

我假设这些是常规站点上的常规插件,而不是多站点网络激活插件。你可能也需要使条件( !defined( 'WP_ADMIN' ) && !wp_doing_ajax() ) -我还没有想得太认真。

然而,这是一件很奇怪的事情,你应该真正解决你的两个插件之间的冲突。

票数 2
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/408302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档