首页 >CMS教程 >WordPress >通过提及功能增强您的WordPress评论

通过提及功能增强您的WordPress评论

Jennifer Aniston
Jennifer Aniston原创
2025-02-10 11:17:11352浏览

>本教程演示了构建一个WordPress插件,该插件在注释中添加了类似Twitter的@Mention功能。 用户可以互相标记,改善注释互动。

Enhance Your WordPress Comments with a Mention Feature

密钥功能:

  • @mention功能:插件使用户可以使用“@”符号标记其他评论者,类似于Twitter。
  • 电子邮件通知:提到的用户收到有关新评论的电子邮件警报。
  • WordPress集成:与WordPress的评论Meneration System无缝集成。
  • 自定义:
  • 轻松调整@mention文本颜色和其他设置。
>插件开发:

插件,,位于

>目录中。 插件标头对于WordPress识别至关重要:

wp-mention-plugin.php /wp-content/plugins/核心功能被封装在

>类中:>
<code class="language-php"><?php
/**
 * Plugin Name: WP Mention Plugin
 * Plugin URI: https://sitepoint.com
 * Description: Mention registered and unregistered comment authors.
 * Version: 1.0.0
 * Author: John Doe
 * Author URI: https://sitepoint.com
 * License: GPLv2
 */
?></code>

>插件使用wp_mention_plugin>,

<code class="language-php">class wp_mention_plugin {

    public static function initialize() {
        add_filter( 'comment_text', array( 'wp_mention_plugin', 'wpmp_mod_comment' ) );
        add_action( 'wp_set_comment_status', array( 'wp_mention_plugin', 'wpmp_approved' ), 10, 2 );
        add_action( 'wp_insert_comment', array( 'wp_mention_plugin', 'wpmp_no_approve' ), 10, 2 );
    }

    public static function wpmp_mod_comment( $comment ) {
        $color_code = '#00BFFF'; // Deep sky blue
        $pattern = "/(^|\s)@(\w+)/";
        $replacement = "<span style="color:$color_code;">@</span>"; //Style the mention
        $mod_comment = preg_replace( $pattern, $replacement, $comment );
        return $mod_comment;
    }

    private static function wpmp_send_mail( $comment ) {
        $the_related_post = $comment->comment_post_ID;
        $the_related_comment = $comment->comment_ID;
        $the_related_post_url = get_permalink( $the_related_post );
        $the_related_comment_url = get_comment_link( $the_related_comment );

        $the_comment = $comment->comment_content;
        $pattern = "/(^|\s)@(\w+)/";

        if ( preg_match_all( $pattern, $the_comment, $match ) ) {
            foreach ( $match[2] as $m ) {
                $email_owner_name[] = preg_replace( '/@/', '', $m );
            }

            if ( preg_match_all( '/\w+__\w+/', implode( '', $email_owner_name ) ) ) {
                $email_owner_name = str_ireplace( '__', ' ', $email_owner_name );
            }

            $author_emails = array_map( 'self::wpmp_gen_email', $email_owner_name );

            if ( ! is_null( $author_emails ) ) {
                $subj = '[' . get_bloginfo( 'name' ) . '] You were mentioned in a comment!';
                $email_body = "You were mentioned in a comment!  See it here: $the_related_comment_url\n\nRelated Post: $the_related_post_url";
                wp_mail( $author_emails, $subj, $email_body );
            }
        }
    }

    public static function wpmp_gen_email( $name ) {
        global $wpdb;
        $name = sanitize_text_field( $name );
        $query = "SELECT comment_author_email FROM {$wpdb->comments} WHERE comment_author = %s";
        $prepare_email_address = $wpdb->prepare( $query, $name );
        return $wpdb->get_var( $prepare_email_address );
    }

    public static function wpmp_approved( $comment_id, $status ) {
        $comment = get_comment( $comment_id, OBJECT );
        ( $comment && $status == 'approve' ? self::wpmp_send_mail( $comment ) : null );
    }

    public static function wpmp_no_approve( $comment_id, $comment_object ) {
        ( wp_get_comment_status( $comment_id ) == 'approved' ? self::wpmp_send_mail( $comment_object ) : null );
    }
}

$wp_mention_plugin = new wp_mention_plugin;
$wp_mention_plugin->initialize();
?></code>
挂钩来管理提及和通知。 切记在电子邮件主体中用网站的名称替换

comment_text> wp_set_comment_statuswp_insert_comment "MyBlog.com"

这个增强的版本直接在评论文本中设计了提及,从而提供了更具用户友好的体验。 为了清楚起见,还改进了电子邮件通知。 请记住要处理生产环境中的潜在错误(例如,找不到电子邮件)。

>

以上是通过提及功能增强您的WordPress评论的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn