WordPress展示最近更新过的文章并通知评论过的用户

冬天,洁白的雪花慢慢地飘落下来,落到这里,飘到那里,我们仿佛置身于童话般的雪白世界。在苍茫的大海上,狂风卷集着乌云。在乌云和大海描写大海的散文之间,海燕像黑色的闪电,在高傲的飞翔。

当有人反馈某篇文章下载链接失效,缙哥哥更新后仍旧不知道,所以如题,我们有时候会因为一些功能的不完美或者代码的时效性、下载地址的更新等,对一些旧文章进行一些不定期更新,但是这种更新一旦没有及时通知访客,往往就没有什么意义了,访客很难知道。缙哥哥从“龙笑天下”和“闲鱼”博主那看过一篇文章《WordPress修改更新文章后邮件通知评论过那篇文章的用户》《WordPress纯代码实现展示最近更新过的文章》,缙哥哥觉得这个方法也很好,但是也有其局限性,比如邮件太多会造成垃圾邮件、有限的评论访客导致文章更新扩散不广等等。缙哥哥学习闲鱼大神将二者结合起来,并做此记录。

展示更新文章代码

将以下代码添加到主题的 functions.php里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Recently Updated Posts by zwwooooo | zww.me
function recently_updated_posts($num=10,$days=7) {
   if( !$recently_updated_posts = get_option('recently_updated_posts') ) {
       query_posts('post_status=publish&orderby=modified&posts_per_page=-1');
       $i=0;
       while ( have_posts() && $i<$num ) : the_post();
           if (current_time('timestamp') - get_the_time('U') > 60*60*24*$days) {
               $i++;
               $the_title_value=get_the_title();
               $recently_updated_posts.='<li><a rel="nofollow noopener noreferrer" href="'.get_permalink().'" title="'.$the_title_value.'">'
               .$the_title_value.'</a><span class="updatetime"><br />» 修改时间: '
               .get_the_modified_time('Y.m.d G:i').'</span></li>';
           }
       endwhile;
       wp_reset_query();
       if ( !empty($recently_updated_posts) ) update_option('recently_updated_posts', $recently_updated_posts);
   }
   $recently_updated_posts=($recently_updated_posts == '') ? '<li>None data.</li>' : $recently_updated_posts;
   echo $recently_updated_posts;
}

function clear_cache_zww() {
    update_option('recently_updated_posts', ''); // 清空 recently_updated_posts
}
add_action('save_post', 'clear_cache_zww'); // 新发表文章/修改文章时触发更新

// Recently Updated Posts by zwwooooo | zww.me function recently_updated_posts($num=10,$days=7) { if( !$recently_updated_posts = get_option('recently_updated_posts') ) { query_posts('post_status=publish&orderby=modified&posts_per_page=-1'); $i=0; while ( have_posts() && $i<$num ) : the_post(); if (current_time('timestamp') - get_the_time('U') > 60*60*24*$days) { $i++; $the_title_value=get_the_title(); $recently_updated_posts.='<li><a rel="nofollow noopener noreferrer" href="'.get_permalink().'" title="'.$the_title_value.'">' .$the_title_value.'</a><span class="updatetime"><br />» 修改时间: ' .get_the_modified_time('Y.m.d G:i').'</span></li>'; } endwhile; wp_reset_query(); if ( !empty($recently_updated_posts) ) update_option('recently_updated_posts', $recently_updated_posts); } $recently_updated_posts=($recently_updated_posts == '') ? '<li>None data.</li>' : $recently_updated_posts; echo $recently_updated_posts; } function clear_cache_zww() { update_option('recently_updated_posts', ''); // 清空 recently_updated_posts } add_action('save_post', 'clear_cache_zww'); // 新发表文章/修改文章时触发更新

调用方式

8 为展示文章数量,15 指15天内发表的文章除外,具体使用的时候可以根据自己的情况修改这两个参数。

1
2
3
4
<h3>Recently Updated Posts</h3> 
<ul> 
<?php if ( function_exists('recently_updated_posts') ) recently_updated_posts(8,15); ?> 
</ul>

<h3>Recently Updated Posts</h3> <ul> <?php if ( function_exists('recently_updated_posts') ) recently_updated_posts(8,15); ?> </ul>

缙哥哥有添加数据库缓存方式,所以在修改文章/删除文章/发表文章时才会更新缓存。
相关参数说明:$num – 展示数量,$days – 几天内的新文章除外。

更新文章后邮件通知评论过的用户

将以下代码添加到functions.php中,会在修改编辑文章的页面添加一个选项,只有勾选才会邮件通知。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/** 
 * WordPress展示最近更新过的文章 并通知评论过的用户 
 * https://www.dujin.org/fenxiang/wp/9809.html 
 */ 
//修改更新文章时邮件通知评论用户 
add_action( 'submitpost_box', 'lxtx_fo_submit_box'); 
function lxtx_fo_submit_box( ){ 
    echo '<div id="fo_side-sortables" class="meta-box-sortables ui-sortable">'; 
    echo '<div id="fo_submit_box" class="postbox ">'; 
    echo '<div class="handlediv" title="点击以切换"><br></div>'; 
    echo '<h3 class="hndle"><span>邮件通知</span></h3>'; 
    echo '<div class="inside"><div class="submitbox">'; 
    echo ' <div style="padding: 10px 10px 0;text-align: left;"><label class="selectit" title="慎用此功能,重要文章才勾选嘛,以免引起读者反感哈"><input type="checkbox" name="FO_emaill_report_user" value="true" title="勾选此项,将邮件通知本文所有评论者"/>邮通知本文所有评论者</label></div>'; 
    echo '</div></div>'; 
    echo '</div>'; 
    echo '</div>'; 
} 
//开始 
add_action( 'publish_post', 'lxtx_fo_emaill_report_users' ); 
function lxtx_fo_emaill_report_users($post_ID) 
{
    //如果未勾选保存,不进行任何操作 
    if($_POST['FO_emaill_report_user'] != 'true'){ 
        return; 
    } 

    //修订版本不通知,以免滥用 
    if( wp_is_post_revision($post_ID) ){ 
        return; 
    } 

    //获取wp数据操作类 
    global $wpdb,$post; 
    // 读数据库,获取文章的所有用户的email并且不重复 
    $emailauthor != '你自己的邮箱'; 
    $wp_user_emails = $wpdb->get_results("SELECT DISTINCT comment_author, comment_author_email FROM $wpdb->comments WHERE TRIM(comment_author_email) IS NOT NULL AND TRIM(comment_author_email) != '' AND TRIM(comment_author_email) != '$emailauthor' AND comment_post_ID = $post->ID"); 

    // 获取博客名称 
    $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); 
    // 获取博客URL 
    $blogurl = get_bloginfo("siteurl"); 

    //文章链接 
    $post_link = get_permalink($post_ID); 
    //文章标题$post -> post_title 
    $post_title = strip_tags($_POST['post_title']); 
    //文章内容$post->post_content 
    $post_content = strip_tags($_POST['post_content']); 
    //文章摘要 
    $output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,0}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,200}).*/s','\1',$post_content).'......'; 

    //邮件头,以免乱码 
    $message_headers = "Content-Type: text/html; charset=\&;utf-8\&;\n"; 
    // 邮件标题 
    $subject = '您曾经来访过的《'.$post_title.'》文章更新通知。'; 

    foreach ( $wp_user_emails as $wp_user_email ) 
    { 
        // 邮件内容 
        $message = ' 
        <div style="MARGIN-RIGHT: auto; MARGIN-LEFT: auto;"> 
            <strong style="line-height: 1.5; font-family:Microsoft YaHei;"> 
                亲爱的'.$wp_user_email->comment_author.': 
            </strong> 
            <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 
                您曾经来访过的《'.$post_title.'》有更新,博主觉得有必要通知您,希望不会骚扰到您。 
            </p> 
            <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 
                文章标题:<a title="'.$post_title.'" rel="nofollow noopener noreferrer" href="'.$post_link.'" target="_top">'.$post_title.'</a> 
                <br/> 
                文章摘要:'.$output.' 
            </p> 
            <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 
                您可以点击链接 
                <a rel="nofollow noopener noreferrer" href="'.$blogurl.'" style="line-height: 1.5;">'.$blogname.'</a> 
                > 
                <a title="'.$post_title.'" rel="nofollow noopener noreferrer" href="'.$post_link.'" target="_top">'.$post_title.'</a> 
                详细查看 
            </p> 
            <p style="font-size: 14px; padding-top: 6px; text-align: left;"> 
                <span style="line-height: 1.5; color: rgb(153, 153, 153);"> 
                    来自: 
                </span> 
                <a rel="nofollow noopener noreferrer" href="'.$blogurl.'" style="line-height: 1.5;">'.$blogname.'</a> 
            </p> 
            <div style="font-size: 12px; border-top-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; height: 35px; width: 500px; color: rgb(102, 102, 102); line-height: 35px; background-color: rgb(245, 245, 245);"> 
                该邮件为系统发送邮件,请勿直接回复!如有打扰,请向博主留言反映。灰常感谢您的阅读! 
            </div> 
        </div>'; 
        wp_mail($wp_user_email->comment_author_email, $subject, $message, $message_headers); 
    } 
}

/** * WordPress展示最近更新过的文章 并通知评论过的用户 * https://www.dujin.org/fenxiang/wp/9809.html */ //修改更新文章时邮件通知评论用户 add_action( 'submitpost_box', 'lxtx_fo_submit_box'); function lxtx_fo_submit_box( ){ echo '<div id="fo_side-sortables" class="meta-box-sortables ui-sortable">'; echo '<div id="fo_submit_box" class="postbox ">'; echo '<div class="handlediv" title="点击以切换"><br></div>'; echo '<h3 class="hndle"><span>邮件通知</span></h3>'; echo '<div class="inside"><div class="submitbox">'; echo ' <div style="padding: 10px 10px 0;text-align: left;"><label class="selectit" title="慎用此功能,重要文章才勾选嘛,以免引起读者反感哈"><input type="checkbox" name="FO_emaill_report_user" value="true" title="勾选此项,将邮件通知本文所有评论者"/>邮通知本文所有评论者</label></div>'; echo '</div></div>'; echo '</div>'; echo '</div>'; } //开始 add_action( 'publish_post', 'lxtx_fo_emaill_report_users' ); function lxtx_fo_emaill_report_users($post_ID) { //如果未勾选保存,不进行任何操作 if($_POST['FO_emaill_report_user'] != 'true'){ return; } //修订版本不通知,以免滥用 if( wp_is_post_revision($post_ID) ){ return; } //获取wp数据操作类 global $wpdb,$post; // 读数据库,获取文章的所有用户的email并且不重复 $emailauthor != '你自己的邮箱'; $wp_user_emails = $wpdb->get_results("SELECT DISTINCT comment_author, comment_author_email FROM $wpdb->comments WHERE TRIM(comment_author_email) IS NOT NULL AND TRIM(comment_author_email) != '' AND TRIM(comment_author_email) != '$emailauthor' AND comment_post_ID = $post->ID"); // 获取博客名称 $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); // 获取博客URL $blogurl = get_bloginfo("siteurl"); //文章链接 $post_link = get_permalink($post_ID); //文章标题$post -> post_title $post_title = strip_tags($_POST['post_title']); //文章内容$post->post_content $post_content = strip_tags($_POST['post_content']); //文章摘要 $output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,0}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,200}).*/s','\1',$post_content).'......'; //邮件头,以免乱码 $message_headers = "Content-Type: text/html; charset=\&;utf-8\&;\n"; // 邮件标题 $subject = '您曾经来访过的《'.$post_title.'》文章更新通知。'; foreach ( $wp_user_emails as $wp_user_email ) { // 邮件内容 $message = ' <div style="MARGIN-RIGHT: auto; MARGIN-LEFT: auto;"> <strong style="line-height: 1.5; font-family:Microsoft YaHei;"> 亲爱的'.$wp_user_email->comment_author.': </strong> <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 您曾经来访过的《'.$post_title.'》有更新,博主觉得有必要通知您,希望不会骚扰到您。 </p> <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 文章标题:<a title="'.$post_title.'" rel="nofollow noopener noreferrer" href="'.$post_link.'" target="_top">'.$post_title.'</a> <br/> 文章摘要:'.$output.' </p> <p style="FONT-SIZE: 14px; PADDING-TOP: 6px"> 您可以点击链接 <a rel="nofollow noopener noreferrer" href="'.$blogurl.'" style="line-height: 1.5;">'.$blogname.'</a> > <a title="'.$post_title.'" rel="nofollow noopener noreferrer" href="'.$post_link.'" target="_top">'.$post_title.'</a> 详细查看 </p> <p style="font-size: 14px; padding-top: 6px; text-align: left;"> <span style="line-height: 1.5; color: rgb(153, 153, 153);"> 来自: </span> <a rel="nofollow noopener noreferrer" href="'.$blogurl.'" style="line-height: 1.5;">'.$blogname.'</a> </p> <div style="font-size: 12px; border-top-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; height: 35px; width: 500px; color: rgb(102, 102, 102); line-height: 35px; background-color: rgb(245, 245, 245);"> 该邮件为系统发送邮件,请勿直接回复!如有打扰,请向博主留言反映。灰常感谢您的阅读! </div> </div>'; wp_mail($wp_user_email->comment_author_email, $subject, $message, $message_headers); } }

效果截图

在WordPress后台编辑文章页面右上方出,有“邮件通知本文所有评论者”。

请无视缙哥哥少了一个字,我懒得换图片。

到此这篇关于WordPress展示最近更新过的文章并通知评论过的用户就介绍到这了。假如青春是一种缺陷的话,那也是我们太快就会失去的缺陷。更多相关WordPress展示最近更新过的文章并通知评论过的用户内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!