当新帖子/页面待处理时向管理员发送电子邮件通知

有心的托马斯

我们有一个脚本,可以在贡献者创建新页面或帖子时通过电子邮件通知管理员,因此“待处理”但通知重复。页面/帖子正在使用古腾堡编辑器,我认为这是导致此问题的原因(请参阅此处:https : //github.com/WordPress/gutenberg/issues/15094)但我不知道解决方案是什么。

add_action( 'transition_post_status', 'pending_submission_notifications_send_email', 10, 3 );
function pending_submission_notifications_send_email( $new_status, $old_status, $post ) {
    // Notify Admin that Contributor has written a post.
    if ( 'pending' === $new_status && user_can( $post->post_author, 'edit_posts' ) && ! user_can( $post->post_author, 'publish_posts' ) ) {
        $pending_submission_email = '[email protected]';
        $admins                   = ( empty( $pending_submission_email ) ) ? get_option( 'admin_email' ) : $pending_submission_email;
        $edit_link                = get_edit_post_link( $post->ID, '' );
        $preview_link             = get_permalink( $post->ID ) . '&preview=true';
        $username                 = get_userdata( $post->post_author );
        $username_last_edit       = get_the_modified_author();
        $subject                  = __( 'New post or page pending review', 'pending-submission-notifications' ) . ': "' . $post->post_title . '"';
        $message                  = __( 'A new post or page is pending review.', 'pending-submission-notifications' );
        $message                 .= "\r\n\r\n";
        $message                 .= __( 'Author', 'pending-submission-notifications' ) . ': ' . $username->user_login . "\r\n";
        $message                 .= __( 'Title', 'pending-submission-notifications' ) . ': ' . $post->post_title . "\r\n";
        $message                 .= "\r\n\r\n";
        $message                 .= __( 'Edit the submission', 'pending-submission-notifications' ) . ': ' . $edit_link . "\r\n";
        $message                 .= __( 'Preview the submission', 'pending-submission-notifications' ) . ': ' . $preview_link;
        $result                   = wp_mail( $admins, $subject, $message );
    } // Notify Contributor that Admin has published their post.
    elseif ( 'pending' === $old_status && 'publish' === $new_status && user_can( $post->post_author, 'edit_posts' ) && ! user_can( $post->post_author, 'publish_posts' ) ) {
        $username = get_userdata( $post->post_author );
        $url      = get_permalink( $post->ID );
        $subject  = __( 'Your submission is now live! ', 'pending-submission-notifications' );
        $message  = '"' . $post->post_title . '" ' . __( 'was just published ', 'pending-submission-notifications' ) . "! \r\n\r\n";
        $message .= $url;
        $result   = wp_mail( $username->user_email, $subject, $message );
    }
}
内特·弗林

你是对的,它似乎与你链接的古腾堡问题直接相关。(在该线程中回答的原因https://github.com/WordPress/gutenberg/issues/15094#issuecomment-558986406)。

本质上,如果您使用一个插件将自定义元数据添加到启用了 Gutenberg 的帖子,则挂钩会被触发两次以实现向后兼容性,以确保无法使用 Gutenberg REST 调用的插件仍然可以保存其数据。

为了让你的案例工作,你必须向你的脚本添加条件检查,以确保你在正确的传递上运行它(即Rest 调用)

add_action( 'transition_post_status', 'pending_submission_notifications_send_email', 10, 3 );
function pending_submission_notifications_send_email( $new_status, $old_status, $post ) {

    // If this is running in the Gutenberg REST call, ignore it
    if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { return false; }

    // Notify Admin that Contributor has written a post.
    if ( 'pending' === $new_status && user_can( $post->post_author, 'edit_posts' ) && ! user_can( $post->post_author, 'publish_posts' ) ) {
        $pending_submission_email = '[email protected]';
        $admins                   = ( empty( $pending_submission_email ) ) ? get_option( 'admin_email' ) : $pending_submission_email;
        $edit_link                = get_edit_post_link( $post->ID, '' );
        $preview_link             = get_permalink( $post->ID ) . '&preview=true';
        $username                 = get_userdata( $post->post_author );
        $username_last_edit       = get_the_modified_author();
        $subject                  = __( 'New post or page pending review', 'pending-submission-notifications' ) . ': "' . $post->post_title . '"';
        $message                  = __( 'A new post or page is pending review.', 'pending-submission-notifications' );
        $message                 .= "\r\n\r\n";
        $message                 .= __( 'Author', 'pending-submission-notifications' ) . ': ' . $username->user_login . "\r\n";
        $message                 .= __( 'Title', 'pending-submission-notifications' ) . ': ' . $post->post_title . "\r\n";
        $message                 .= "\r\n\r\n";
        $message                 .= __( 'Edit the submission', 'pending-submission-notifications' ) . ': ' . $edit_link . "\r\n";
        $message                 .= __( 'Preview the submission', 'pending-submission-notifications' ) . ': ' . $preview_link;
        $result                   = wp_mail( $admins, $subject, $message );
    } // Notify Contributor that Admin has published their post.
    elseif ( 'pending' === $old_status && 'publish' === $new_status && user_can( $post->post_author, 'edit_posts' ) && ! user_can( $post->post_author, 'publish_posts' ) ) {
        $username = get_userdata( $post->post_author );
        $url      = get_permalink( $post->ID );
        $subject  = __( 'Your submission is now live! ', 'pending-submission-notifications' );
        $message  = '"' . $post->post_title . '" ' . __( 'was just published ', 'pending-submission-notifications' ) . "! \r\n\r\n";
        $message .= $url;
        $result   = wp_mail( $username->user_email, $subject, $message );
    }
}

请记住,这是未经测试的,但根据上面链接的问题报告,这应该忽略通过古腾堡编辑器的第一次传递,只传递具有正确帖子数据的版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

上载视频时向作者和管理员发送电子邮件通知的功能

Umbraco - 当编辑器创建内容时向管理员发送电子邮件通知

发生攻击时向管理员发送电子邮件的脚本

新用户在WordPress中注册36小时后,向管理员发送电子邮件

当用户提交表单时,Django博客会向管理员发送电子邮件

如何阻止此Bash脚本向管理员发送电子邮件?

不要通过管理员中的电子邮件opencart 2.3.0.2向客户发送电子邮件

如何向管理员和客户发送暂停 WooCommerce 电子邮件通知

尝试在内部服务器错误时向管理员发送电子邮件时,Django无法正确启动STARTTLS

无法通过kaa管理员发送电子邮件

Strapi发送电子邮件给所有管理员

实施电子邮件服务以在管理员回复帖子时通知用户

如何使用Devise向管理员发送管理员专用的密码重置电子邮件?

从本地 WAMP 服务器正确注册到 google 帐户后,向管理员发送电子邮件 - PHP、MySQL、SwiftMailer

在Woocommerce中以BCC身份发送给管理员的新帐户电子邮件通知

发送保留订单状态电子邮件通知给管理员

使用管理员通知电子邮件发送帐单公司

WooCommerce将电子邮件通知发送给管理员以获取特定的订单状态

在 Django 中创建新帖子时自动发送电子邮件

发送PHP确认电子邮件管理员电子邮件已发送

覆盖“主题我的登录”WordPress 插件中两个变量的值,以便我可以停止向管理员/用户发送多个电子邮件通知

Wordpress –– 有人使用我的管理员电子邮件地址/用户名发送电子邮件确认虚假注册

在首次更新商品时发送电子邮件通知

当人偶运行失败时发送电子邮件通知

导入用户和管理员的csv文件,然后通过电子邮件向管理员发送其用户列表的最佳方法

发送给管理员的 WooCommerce 电子邮件通知中的自定义格式地址部分

当Django管理员创建用户时,将用户详细信息发送到他的电子邮件

如何在自定义工作流程中以特定的“支持”管理员用户身份发送电子邮件?

在Woocommerce管理员电子邮件通知中显示产品自定义字段值