在我的(管理)插件中,我想使用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
因此不会添加。是什么导致了这种行为?
最合适的回答,由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
}
}