如何在特定时间自动激活和停用两个插件?
例如,
我希望“阿基塞特”插件只能在上午10点到晚上7点激活,而其他的“时代”则被停用。
和
"Yoast“插件只能在上午7点到10点激活,而”其他时报“则被停用。
注意:
比如阿基塞特和尤斯特·西奥,而不是真的。
2-省略这样一个事实,即除非站点被击中,否则function.php不会运行代码。这可能会导致一些潜在的失误。这里使用wp_schedule_event()的另一个答案是使用CRON,而不依赖于“外部”强制。
此代码在特定日期和插件中被激活和停用。
$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' );
}
我该怎么做呢?谢谢。
发布于 2022-08-08 08:53:10
与其更新数据库,不如编写一个mu来拦截来自active_plugins选项的读取。
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() )
-我还没有想得太认真。
然而,这是一件很奇怪的事情,你应该真正解决你的两个插件之间的冲突。
https://wordpress.stackexchange.com/questions/408302
复制相似问题