我正在尝试在WP Admin区域中向Users表的每个项目添加一个链接,并使用该链接向特定用户发送电子邮件。我大部分时间都在那里,但我有一些奇怪的行为,我无法理解。这是我的代码:(我在下面描述我的问题)
// Adds "Send rejection email" action to Users page
function jm_send_rejection_link($actions, $user_object) {
if( ($_POST[\'send\']) && ($_POST[\'email-address\'] == $user_object->user_email) ) {
$sendto = $_POST[\'email-address\'];
$sendsub = "Your registration has been rejected.";
$sendmess = "Sorry! Your registration has been rejected. I guess someone doesn\'t like you.";
$headers = array(\'From: The Company <[email protected]>\');
wp_mail($sendto, $sendsub, $sendmess, $headers);
echo \'<div class="updated notice"><p>Success! The rejection email has been sent to \' . $_POST[\'email-address\'] . \'.</p></div>\';
}
$actions[\'send_rejection\'] = "<form method=\'post\' action=\'\'>
<input type=\'hidden\' name=\'email-address\' value=\'" . $user_object->user_email . "\' />
<input type=\'submit\' name=\'send\' value=\'Send Rejection\' />
</form>";
return $actions;
}
add_filter(\'user_row_actions\', \'jm_send_rejection_link\', 10, 2);
因此,此代码向表中的每个用户添加了操作链接“发送拒绝电子邮件”。它还成功地发送了电子邮件。。。有时对于表中的第一个用户,它似乎失败了,并且在URL中附加了一些意外的内容:
http://sampledomain.org/wp-admin/users.php?s&action=-1&new_role&paged=1&email-address=emailaddress%sampledomain.com&send=Send+Rejection&action2=-1&new_role2
在这种情况下,它也不会显示成功消息。
对于许多其他用户,它确实成功地显示了成功消息并发送了电子邮件。但是,并非所有其他用户都适用。其他用户显示成功消息,但未收到电子邮件。这些帐户可能只是在防火墙或其他地方捕获电子邮件,尽管它不会出现在垃圾邮件中。
我最担心的是我做错了什么,这会导致第一个用户出现问题。有什么想法吗?
PS-我确实意识到我在那里的IF语句有点奇怪。我想是因为我在user_row_actions
它为表上的每个用户运行,这就是为什么我只为其电子邮件与发布地址匹配的用户发送电子邮件。我知道有点倒退。如果我将它们分成两个不同的函数,那么对于如何让第二个函数在用户页面上运行而不为每个用户运行,我将不胜感激。
最合适的回答,由SO网友:Lime 整理而成
谢谢你的指导,嗯。这很有帮助。我这样解决了问题:
// Adds "Send rejection email" action to Users page
function jm_send_rejection_link($actions, $user_object) {
if( ($_GET[\'action\'] == \'jm_send_rejection\') && ($_GET[\'user\'] == $user_object->user_email) ) {
$sendto = $_GET[\'user\'];
$sendsub = "Your registration has been rejected.";
$sendmess = "Your registration for has been rejected.";
$headers = array(\'From: The Company <[email protected]>\');
wp_mail($sendto, $sendsub, $sendmess, $headers);
echo \'<div class="updated notice"><p>Success! The rejection email has been sent to \' . $_GET[\'user\'] . \'.</p></div>\';
}
$actions[\'send_rejection\'] = "<a class=\'jm_send_rejection\' href=\'" . admin_url( "users.php?action=jm_send_rejection&user=" . $user_object->user_email ) . "\'>" . __( \'Send Rejection\' ) . "</a>";
return $actions;
}
add_filter(\'user_row_actions\', \'jm_send_rejection_link\', 10, 2);
这无疑纠正了我与列表中第一个用户之间的问题。它没有解决另一个帐户不接收电子邮件的问题,但我90%确信这与该帐户的电子邮件服务器设置有关,而不是与我的代码有关。