我正在使用Airtable为多个WP站点保存一个插件的实时列表,并且在激活或删除插件时,Zapier通过电子邮件发送新的插件数据几乎可以正常工作。
该电子邮件在插件激活时是正确的,但在停用后,最近停用的插件仍包含在列表中。插件列表是否以某种方式被缓存?
几乎正常工作的代码:
////////////////////////////////////////////////////////////
// send an email on plugin activate / deactivate
////////////////////////////////////////////////////////////
function urlToDomain($url) {
return implode(array_slice(explode(\'/\', preg_replace(\'/https?:\\/\\/(www\\.)?/\', \'\', $url)), 0, 1));
}
function detect_plugin_change( $plugin, $network_activation ) {
$url = urlToDomain(site_url());
$the_plugs = get_option(\'active_plugins\');
sort ( $the_plugs );
foreach($the_plugs as $key => $value) {
$string = explode(\'/\',$value);
$plugins .= $string[0] .", ";
}
$to = [email address removed];
$subject = $url;
$body = $plugins;
$headers = array(\'Content-Type: text/html; charset=UTF-8\');
wp_mail( $to, $subject, $body, $headers );
}
add_action( \'activated_plugin\', \'detect_plugin_change\', 10, 2 );
add_action( \'deactivated_plugin\', \'detect_plugin_change\', 10, 2 );
这会发送如下电子邮件:
To: [电子邮件地址已删除]
Subject: sitename。com公司
Body: 管理菜单编辑器、显示帖子短代码、重力表单、列表页面短代码、插件中心、简单历史、分类列表短代码、用户切换、wordpress seo、wp scss
有什么想法需要编辑,以便在插件停用时正常工作?非常感谢。
最合适的回答,由SO网友:phatskat 整理而成
如果你看here 在里面/wp-admin/includes/plugin.php
do_action( \'deactivated_plugin\', $plugin, $network_deactivating );
}
}
if ( $do_blog )
update_option(\'active_plugins\', $current);
if ( $do_network )
update_site_option( \'active_sitewide_plugins\', $network_current );
直到钩子触发后,选项才会更新。
您可以通过使用第一个参数deactivated_plugin
:
function detect_plugin_change( $plugin, $network_activation ) {
$url = urlToDomain(site_url());
$the_plugs = get_option(\'active_plugins\');
sort ( $the_plugs );
foreach($the_plugs as $value) {
// Skip the deactivated plugin.
if ( $plugin === $value ) {
continue;
}
$string = explode(\'/\',$value);
$plugins .= $string[0] .", ";
}
$to = [email address removed];
$subject = $url;
$body = $plugins;
$headers = array(\'Content-Type: text/html; charset=UTF-8\');
wp_mail( $to, $subject, $body, $headers );
}
<编辑:如果需要,您还可以使用
get_plugin_data.