如何对评论提交/插入使用过滤器

时间:2012-11-18 作者:dkmojo

我正在为我的家人做一个分享信息、食谱等的小项目,我添加了一个“@”提及功能。既然提及功能起作用了,我需要通知用户他们被提及了。

我认为WP的评论已经做到了这一点,因为我的家人会通过电子邮件收到评论通知,所以我决定在DB中出现提及时插入评论。它使用注释类型“提及”,并将comment\\u post\\u ID设置为0,并添加一些注释元数据来存储被提及的用户和进行提及的用户。它工作得很好。

我可以使用wp\\U mail发送电子邮件,没有问题,但由于“提及”是“评论”,我想使用wp已经提供的任何内容。我找到了两种可能有用的方法:wp\\u notify\\u posauthor和comment\\u post。

使用comment\\u post是可行的,但它只发送普通评论。

我尝试过滤并挂接到wp\\u notify\\u posauthor,但没有成功。以下是筛选wp\\u notify\\u postauthor的方法:

add_filter(\'wp_notify_postauthor\', \'smile_wp_send_member_notification\', 10, 2);

function smile_wp_send_member_notification( $comment_id, $comment_type ){

    ob_start();

    //get comment info
    $comment = get_comment( $comment_id );
    $from_user = $comment->user_id;
    $post = get_post( $comment->comment_post_ID );
    $author = get_userdata( $post->post_author );

    //set email subject
    $email_subject = $comment->comment_type.\' notification title\';

    include(\'email_header.php\');
    ?>

    <p>
        <?php echo $comment->comment_type; ?> <?php echo $post->post_type; ?> Notification Message in here.<br />
        <?php echo $comment->comment_content; ?>
    </p>

    <?php 

    include(\'email_footer.php\');

    $message = ob_get_contents();

    //clear buffer
    ob_end_clean();

    //ob_start();
    //wp_mail( $author->user_email, $email_subject, $message );
    //ob_end_clean();

    return $message;

}//end smile_wp_send_member_notification
我认为wp\\u notify\\u posauthor是可插入的,但可能不是。如果有其他方法执行此操作或获取电子邮件通知,请让我知道。

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

事实证明,只有当comment\\u post\\u ID不是0时,才会发送通知电子邮件。我修改了通知注释代码来设置comment\\u post\\u ID,现在一切都正常了!

SO网友:Milo

没有wp_notify_postauthor 过滤器,apluggable function 是您用自己的函数重写的函数:

if( ! function_exists(\'wp_notify_postauthor\') ) {
    function wp_notify_postauthor( $comment_id, $comment_type = \'\' ) {
        // your own wp_notify_postauthor code
    }
}
我建议looking at the function in source 看看它能做什么。

结束

相关推荐

Ajax comments not working

我遵循了“ajaxify”wordpress评论的教程,其中不会重新加载页面:jQuery(\'document\').ready(function ($) { $(\'#commentform\').each(function () { var commentform = $(this); // find the comment form commentform.prepend(\'<div id=\"comment-status\"