领款申请列表功能-如何在用户的领款申请获得批准或拒绝时向其发送电子邮件

时间:2019-09-01 作者:jand1

我们有一个声明列表插件,它允许用户声明项目(帖子)。它要求用户“注册”以声明该项目,因此他们必须输入用户名和电子邮件。

在他们提交索赔后,将向管理员电子邮件(我们)发送一封电子邮件,说明用户正在索赔该项目,并向我们提供批准或拒绝该项目的选项。

不幸的是,当我们批准或拒绝该项目时,不会向用户发送电子邮件,通知他们该项目已被批准或拒绝。

我们如何让wordpress向用户发送电子邮件,告知他们我们的回应?

代码:CodeShare (代码太长了,当我把它粘贴到这里的时候,代码被破坏了,伙计们,对不起!)如您所见,其中有一个wp\\U邮件功能,但用于向管理员发送邮件时,表明已请求项目所有权请求)

这似乎与问题(下面的代码)有关,然后我们需要添加什么来向用户发送电子邮件,表示他们的请求已被批准?

public static function claimListingActions(){
    if(isset($_GET[\'post_type\']) && $_GET[\'post_type\'] === \'ait-item\'){

        if (isset($_GET[\'claim-action\']) && !empty($_GET[\'post-id\'])) {
            $postID = intval($_GET[\'post-id\']);
            // admin can approve all ratings
            if (current_user_can(\'manage_options\')) {
                switch($_GET[\'claim-action\']){
                    case \'approve\':
                        $redirect = admin_url(\'edit.php?post_type=ait-item&ait-notice=claim-approved\');

                        $data = get_post_meta($postID, \'ait-claim-listing\', true);
                        $data[\'status\'] = \'approved\';

                        update_post_meta($postID, \'ait-claim-listing\', $data);

                        $user = get_user_by(\'email\', $data[\'owner\']);

                        // update also the _ait-item_item-author data field -> prevent errors
                        update_post_meta($postID, \'_ait-item_item-author\', array(\'author\' => $user->ID));

                        wp_update_post( array(\'ID\' => $postID, \'post_author\' => $user->ID), true );
                    break;
                    case \'decline\':
                        $redirect = admin_url(\'edit.php?post_type=ait-item&ait-notice=claim-declined\');

                        $data = get_post_meta($postID, \'ait-claim-listing\', true);
                        $data[\'status\'] = \'unclaimed\';
                        $data[\'owner\'] = \'-\';
                        $data[\'date\'] = \'-\';

                        update_post_meta($postID, \'ait-claim-listing\', $data);

                        $user = new WP_User($data[\'author\']);

                        // update also the _ait-item_item-author data field -> prevent errors
                        update_post_meta($postID, \'_ait-item_item-author\', array(\'author\' => $user->ID));

                        wp_update_post( array(\'ID\' => $postID, \'post_author\' => $user->ID) );
                    break;
                }
                wp_safe_redirect( $redirect );
                exit();
            }
        }
    }
}

1 个回复
SO网友:butlerblog

不幸的是,开发人员没有在他们的代码中为您提供任何挂钩,以便在不进行黑客攻击的情况下进行定制。但并没有失去一切——WP中有一些钩子可以用来触发电子邮件。

理想的做法是触发update_post_meta(). 该函数只是update_metadata() 里面有很多钩子。

这是一个未经测试的方向示例。希望它能给你一些东西。

/**
 * @param int    $meta_id    ID of updated metadata entry.
 * @param int    $object_id  Post ID.
 * @param string $meta_key   Meta key.
 * @param mixed  $meta_value Meta value. This will be a PHP-serialized string representation of the value if
 *                           the value is an array, an object, or itself a PHP-serialized string.
 */
add_action( \'updated_postmeta\', function( $meta_id, $object_id, $meta_key, $meta_value ) {
    if ( \'ait-claim-listing\' == $meta_key ) {
        if ( \'approved\' == $meta_value[\'status\'] ) {
            $email_to = $meta_value[\'owner\'];
            $subject = \'Your approved email subject\';
            $message = \'Your approved email message...\';
        }

        if ( \'unclaimed\' == $meta_value[\'status\'] ) {
            $email_to = $meta_value[\'author\'];
            $subject = \'Your unclaimed email subject\';
            $message = \'Your unclaimed email message...\';
        }

        $result = wp_mail( $email_to, $subject, $message );
    }
}, 10, 4 );
请记住,这是一个未经测试的过程,只是一个基于问题中信息的思考过程。您可能需要进行一些调整,使其真正起作用。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。