有两种方法:
检查原始值,如果特定于这种情况,则返回特定的新值。
链接过滤器:仅在特定挂钩上注册邮件过滤器。所以你必须找到一个以前发生过的钩子wp_mail()
被调用。
简单示例,未经测试,只是一个指南:
// change mod mails for new comments
add_filter( \'pre_option_moderation_notify\', array ( \'WPSE_Mail_Filter\', \'init\' ) );
// new user registration
add_filter( \'load-user-new.php\', array ( \'WPSE_Mail_Filter\', \'init\' ) );
class WPSE_Mail_Filter
{
protected static $new_mail = NULL;
protected static $new_name = NULL;
public static function init( $input = NULL )
{
if ( \'pre_option_moderation_notify\' === current_filter() )
{
self::$new_mail = \'[email protected]\';
self::$new_name = \'Comments at Example.com\';
}
if ( \'load-user-new.php\' === current_filter() )
{
self::$new_mail = \'[email protected]\';
self::$new_name = \'Users at Example.com\';
}
// add more cases
// then check if we set a new value:
if ( ! empty ( self::$new_mail ) )
add_filter( \'wp_mail_from\', array ( __CLASS__, \'filter_email\' ) );
if ( ! empty ( self::$new_name ) )
add_filter( \'wp_mail_from_name\', array ( __CLASS__, \'filter_name\' ) );
// we do not change anything here.
return $input;
}
public static function filter_name( $name )
{
remove_filter( current_filter(), array ( __CLASS__, __FUNCTION__ ) );
return self::$new_name;
}
public static function filter_email( $email )
{
remove_filter( current_filter(), array ( __CLASS__, __FUNCTION__ ) );
return self::$new_mail;
}
}
困难的部分是找到合适的钩子。
例如,当编写了新注释时,函数wp_notify_moderator()
被调用。该函数中没有真正好的钩子,但它调用…
if ( 0 == get_option( \'moderation_notify\' ) )
…很早。这又一次触发了钩子
pre_option_moderation_notify
, 这就是我们可以启动过滤器的地方。您必须搜索核心代码以找到所有情况下的最佳开始挂钩,但通常总会有一些东西。