发送事务性电子邮件:第一个用户的帖子

时间:2015-11-17 作者:Graham Slick

我想将这段代码添加到我的函数中。php文件,这样当用户创建第一篇帖子时,他会收到一封祝贺他的电子邮件。

function set_mail_html_content_type() {
    return \'text/html\';
}

add_action( \'publish_post\', \'author_publish_notice\', 10 ,2 );

function author_publish_notice( $ID, $post ) {
    if( \'post\' == $post->post_type && count_user_posts(the_author_meta(\'ID\') == 1); ) {
        return;
    }
    $to = \'[email protected]\';
    $subject = \'Your Article Is Online\';
    $message = \'<h1>Congratulations!</h1> <p>Your article is now online and 
        is sure to receives trillions of comments. Please do hang around and answer any questions
        viewers may have!</p> <p><a href="\' . get_permalink( $ID ) . \'">\' . $post->post_title . \'</a></p>\';

    add_filter( \'wp_mail_content_type\', \'set_mail_html_content_type\' );
    wp_mail( $to, $subject, $message ); 
    remove_filter( \'wp_mail_content_type\', \'set_mail_html_content_type\' );

}
然而,我对这句话有疑问:

$to = \'[email protected]\';
要检索作者的电子邮件,codex显示如下:

 <?php the_author_email(); ?> 
这有意义吗?:

$to = the_author_email();
此外,这足以添加一个条件,即该帖子是作者的第一篇帖子:

if( \'post\' == $post->post_type && count_user_posts(the_author_meta(\'ID\') == 1); )
谢谢你的时间和帮助

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

很接近-让我们看看这一行:

if( \'post\' == $post->post_type && count_user_posts(the_author_meta(\'ID\') == 1); )
分号是一个语法错误,PHP会呕吐-让它去吧the_author_meta() 打印数据,不返回任何内容-使用get_the_author_meta() 对于比较和传递内容,post count比较需要在函数调用之外进行-注意括号位置的差异:count_user_posts( $id ) == 1, 不count_user_posts( $id == 1 )说了这么多,我得到的印象是,这种情况(纠正后)与您想要的正好相反-此时您正试图说“如果帖子类型是post 作者有一篇帖子,do nothing“,当你想要相反的(?)

在这种情况下,我想你想要的是:

if ( \'post\' !== $post->post_type || count_user_posts( $post->post_author ) > 1 )
   return; // If the post is NOT a post, or the author has more than one post, bail
看看我是怎么用的$post->post_author 也这是用户ID。它是post对象的一部分,这里不需要使用函数(尽管我说过get_the_author_meta() 更早)。

最后,电子邮件:您可以使用上述author函数,也可以直接获取用户对象(这是前者的包装):

$user_email = get_user_by( \'id\', $post->post_author )->user_email;
现在大家一起:

function author_publish_notice( $ID, $post ) {
    if ( \'post\' !== $post->post_type || count_user_posts( $post->post_author ) > 1 )
        return;

    $to = get_user_by( \'id\', $post->post_author )->user_email;
    $subject = \'Your Article Is Online\';
    $headers = array(
        \'Content-Type: text/html\',
        \'From: [email protected]\',
    );

    $message = \'<h1>Congratulations!</h1> <p>Your article is now online and 
    is sure to receives trillions of comments. Please do hang around and answer any questions
    viewers may have!</p> <p><a href="\' . get_permalink( $ID ) . \'">\' . $post->post_title . \'</a></p>\';

    wp_mail( $to, $subject, $message, $headers ); 
}
您将看到,我还删除了内容类型筛选器-you can pass mail headers as a fourth parameter to wp_mail(), 换行符分隔或作为数组。