发送邮件后链接到管理通知(_O)

时间:2014-06-26 作者:tommyf

在我的(管理)插件中,我想使用admin_notices 成功发送邮件时的操作。当前未显示。我知道这与事件的顺序有关,但我不知道如何构造它以便显示消息。

目前,我正在添加admin_notices 来自内部的操作init 操作回调。我不确定这是否被允许,因此这可能就是问题所在。但是,如果我将其添加到__construct 方法,如何让它知道邮件已发送?

当前我的Send_mail 类类似于:

class Send_mail {
    public function __construct() {
        add_action(\'init\', array($this, \'send_mail\'), 30 );
    }

    public function send_mail() {
        if (!isset($_POST[\'send-confirmation-true\'])) {
            return;
        }

        // wp_mail() functionality
        // returns true on successful send

        if ($mail_sent == true) {
            add_action(\'admin_notices\', array($this, \'show_admin_notice\') );
        }
    }

    public function show_admin_notice() {
        // output admin notice html
    }
}
===编辑===

在进行一些测试之后,我发现在以下if语句之后调用了操作:

if (!isset($_POST[\'send-confirmation-true\'])) {
    return;
}
只有当他们被一个load-(page) (就我而言:load-post.php) 或在操作顺序列表中的之前。我需要的行动是admin_notices 因此不会添加。是什么导致了这种行为?

1 个回复
最合适的回答,由SO网友:tommyf 整理而成

这一解决方案远非理想,但它完成了工作。

在…上$mail_sent == true 设置post meta。在__construct 函数将回调添加到admin_head 检查post meta是否已设置的操作。如果是,请删除帖子元并添加admin_notices 回调到所需的管理通知的操作。

class Send_mail {
    public function __construct() {
        add_action( \'init\', array($this, \'send_mail\'), 30 );
        add_action( \'admin_head\', array($this,\'check_mail_sent\') );
    }

    public function send_mail() {
        if (!isset($_POST[\'send-confirmation-true\'])) {
            return;
        }

        // wp_mail() functionality
        // returns true on successful send

        if ($mail_sent == true) {
            update_post_meta($campaign_id, \'mail_sent\', \'yes\');
        }
    }

    public function check_mail_sent() {
        global $post;
        $mail_sent = get_post_meta( $post->ID, \'mail_sent\', true );

        if($mail_sent == \'yes\') {
            delete_post_meta($post->ID, \'mail_sent\');
            add_action(\'admin_notices\', array($this, \'show_admin_notice\') );
        } else if ($mail_sent == \'no\') {
            // Can handle a mail fail notice here if needed
        }
    }

    public function show_admin_notice() {
        // output admin notice html
    }
}

结束

相关推荐

为什么ADMIN_NOTICES没有显示我的文本?[简单插件,初学者]

下面是四天学习Wordpress和PHP的结果。不幸的是,它没有按预期的方式工作。admin\\u通知栏上不显示任何内容。起初,我以为是$filename = is_plugin_active($filename) ? \"$filename: Active\" : \"$filename: Disabled\"; 线路,但这不是问题所在。你怎么说?function show_names() { $paths = array();