标签: wordpress

  • WordPress发不出去通知邮件的解决方案

    TL;DR

    wordpress国内服务器访问不到发件服务器,所以经过综合考虑之后,选择采用第三方插件和第三方邮箱通过SMTP发送邮件。


    起因

    我转移到wordpress之后,之前搭建在纽约的服务器上,邮件是没什么问题的。评论和被评论都会收到邮件通知。但是正常转移到杭州的服务器上之后发现收不到任何邮件了,包括不限于修改密码,邮箱,用户操作,评论和被评论的通知邮件。

    分析

    ❌期初我以为是因为服务器商封禁了邮件发送端口。但是我在防火墙打开了SMTP端口(25,465 ,587)的出站之后发现还是不行。

    ❌那就要考虑邮件是不是被服务商拦截的,询问客服之后告知不是,同时被告知如果发送垃圾邮件会被封禁。

    ✔️最后我检查之前的邮件,发现是来自wp.com的邮件。我并未安装jetpack,但是邮件依旧不是来自我的站点而是通过wordpress的服务器发送(猜测是需要访问一下WP的接口而非使用PHP的mail()方法发送的邮件)。

    尝试解决

    问题明确之后就很容易解决了。下面是几个直接方案:

    1. 通过一些方案访问WP.COM
      • 代理
      • HOSTS
      • 更换服务器
      • 修改DNS(或许可行?)
      • 利用wordpress的第三方插件访问WP网络
    2. 修改发件邮箱
      • 修改mail()方法
      • 利用第三方插件

    因为我不想改代码了,也不想被警告,经过我1/3秒的思考,我觉得利用第三方插件,即使他们就是一个SMTP发送邮件的方案却做得又大又重,我似乎没有更多其它选择。

    我最后选择了Post SMTP,这是唯一一个SMTP插件,比较流行,看起来没那么重,且貌似不会打扰我的邮件插件。另外不推荐在 VPS 上运行本地 SMTP 服务器(配置复杂,送达率低)。

    https://cn.wordpress.org/plugins/post-smtp

    推荐使用QQ/foxmail邮箱做发件邮箱。所有的插件使用outlook都需要会员,outlook自带的SMTP貌似不可用了。我根据网上的教程设置了SMTP,打开了双重验证,然后在下方寻找应用密码。因为outlook在登录时似乎需要使用应用密码而不是账户密码。但是设置了双重验证,貌似又需要认证,永远提示认证失败。后来查了一下,说是之后会禁用第三方SMTP…奇奇怪怪的东西。另外我也不清楚这个是否会放到corn队列了,并且corn是否会堆积…对WP了解的不多。

    所以,用FOXMAIL算啦!开通”POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”之后,或许一个授权码用作登录即可。记得要勾选“SMTP 发信后保存到服务器”!

    本身在传家宝上搭WP是为了方便,现在反而产生了更多的不方便。

    其他小问题

    • 插件提示存在屏蔽词或者被判断为垃圾内容,如下提示:

    The mail may contain inappropriate words or content.

    此时你应该在插件中找到发送方式(Mailer Type),修改为PHPMailer

    • 发送失败,提示信息中存在如下字样:

    Mail from address must be same as authorization user.

    此时你应该在插件中寻找发件地址(From Address)设置,然后修改文SMTP登录账号的邮箱。并且勾选“禁止其他插件/主题修改此内容”选项

  • 如何为wordpress的文章添加阅读量

    要在 WordPress 上实现文章阅读统计(跟踪每篇文章的阅读次数或页面浏览量),可以借助插件或自定义代码。以下是几种常见的方法和工具,如果使用代码请注意文章内容。

    方法一:使用插件实现文章阅读统计

    1. MonsterInsights
      • MonsterInsights 是最受欢迎的 Google Analytics 插件之一,可以直接在 WordPress 仪表板中查看每篇文章的页面浏览量、访客行为、跳出率等数据。通过其 Page Insights 扩展,还可以查看单篇文章的详细统计(如页面浏览量、停留时间等)。必须绑定GA。
    2. WP Statistics
      • WP Statistics 是一个隐私友好的分析插件,符合 GDPR 要求,无需外部账户,直接在 WordPress 数据库中存储数据。它可以跟踪每篇文章的访问量,并提供详细的图表和分类分析。不过最顶上那个评论似乎说明了一些问题,我没尝试这个插件,观望一下。
    3. Post Views Counter
      • 一个轻量级插件,专门用于显示文章、页面或自定义内容的浏览次数。它支持通过 PHP、JavaScript 或 REST API 跟踪数据,并允许自定义计数器的显示位置和样式。
    4. Jetpack Stats
      • Jetpack 的统计模块提供文章的浏览量、热门内容、流量来源等数据,适合 WordPress.com 用户或安装了 Jetpack 的自托管站点。免费用户可查看过去 7 天的统计,付费计划解锁更多功能。
    5. Independent Analytics
      • 一个专为 WordPress 设计的免费分析插件,加载速度快,符合 GDPR。它可以自动记录文章的访问量,并按类别显示统计数据。
    6. 如果你恰好财力雄厚,你可以使用一些主题的pro版本自带的功能
      • 这里就不对赘述了,例如我使用的blocksy主题,在设置页面左侧点击blocksy,设置中文章元数据打开显示即可。

    方法二:插件之短码插件(推荐)

    1. Post Views for Jetpack
      • 提供短码,可以在文章、页面或小工具中显示各种统计数据。以下部分代码复制于这个插件的讨论区: https://wordpress.org/support/topic/way-to-display-views-in-blocksy-post-meta/

    这个插件如何在blocksy中使用?请在你的function.php中添加以下代码 (注意把[sbs_views] 修改为你上面短码插件中约定的短码):

    add_filter( 'blocksy:archive:render-card-layer', function ( $output, $single_component) {
    	if ( 'post_meta' !== $single_component['id'] ) {
    		return $output;
    	}
    	$post_views = do_shortcode( '[sbs_views]' );
    
    	$output = str_replace( '</li></ul>', '</li><li class="post-views">' . $post_views . '</li></ul>', $output );
    	return $output;
    }, 11, 2 );

    方法三:自定义代码实现阅读统计

    在你的主题的function.php中添加以下代码:

    // 记录文章浏览量
    function set_post_views($postID) {
        $count_key = 'post_views_count';
        $count = get_post_meta($postID, $count_key, true);
        if ($count == '') {
            $count = 0;
            delete_post_meta($postID, $count_key);
            add_post_meta($postID, $count_key, '0');
        } else {
            $count++;
            update_post_meta($postID, $count_key, $count);
        }
    }
    
    // 在单篇文章页面记录浏览量
    function track_post_views($postID) {
        if (!is_single()) return;
        if (empty($postID)) {
            global $post;
            $postID = $post->ID;
        }
        set_post_views($postID);
    }
    add_action('wp_head', 'track_post_views');
    
    // 显示文章浏览量
    function get_post_views($postID) {
        $count_key = 'post_views_count';
        $count = get_post_meta($postID, $count_key, true);
        if ($count == '') {
            delete_post_meta($postID, $count_key);
            add_post_meta($postID, $count_key, '0');
            return "0 Views";
        }
        return $count . ' Views';
    }

    在需要使用的地方添加:

    echo get_post_views(get_the_ID());

    如果需要在blocksy主题中使用:

    add_filter( 'blocksy:archive:render-card-layer', function ( $output, $single_component ) {
        if ( 'post_meta' !== $single_component['id'] ) {
            return $output;
        }
    
        $output = str_replace( '</li></ul>', '</li><li class="post-views">' . get_post_views(get_the_ID()) . '</li></ul>', $output );
        return $output;
    }, 10, 2 );

    注意上面所有的代码部分,可能会造成不可回溯的内容。

    部分可能会在你数据库的前缀_postmeta表中创建很多key为post_views_count 的数据,介意的话可以使用第三方插件或者自己手动修改。另外注意,有的主题不允许修改functions.php的代码,你复制代码保存失败时,可以按 ctrl+ shift + v 粘贴。

  • 从Typecho安全平移到WordPress

    这里不比较Typecho与Wordpress的好坏。实际上优缺点都很明显。但如果你没有其他想法,只是想单纯写写内容,Notebook才是最棒的选择。我只是想把加的各位朋友的友链放在除了友链页以外的其他页面,那貌似只能放在sidebar了,所以选择了一个双栏的杂志主题。后来想了想,直接换wordpress得了。

    1. 导出数据

    数据导出当然使用的是ByTyp,但是我记得之前第一次安装是有什么问题的,貌似是PHP版本不对还是什么东西,忘记了,不过我记得我修改了一些东西。如果你会有这个问题并且你发现搜索不到解决方案,你可以点下面的按钮下载我的备份:

    2. 备份

    备份你需要做以下备份

    • 下载Typecho的所有文件内容
    • 下载Typecho的数据库备份文件
    • 尝试新建数据库并导入数据库备份文件查看是否可以导入
    • 使用Typecho的备份功能下载备份文件
    • 检查以上备份

    3. 安装Wordpress和导入数据

    因为我后端使用的是宝塔,所以有一键部署。我的域名是banzhuanriji.com,我新建的网站绑定的域名为abc(这里你自己设置).banzhuanriji.com,然后所有的操作都是在这个网站上进行的。

    工具-导入-立即安装,安装完成后会显示【运行导入器】,然后选择上面ByTyp导出的文件即可,选择接受用户即可。

    4. 修改域名

    1. 检查上面的备份内容
    2. wordpress后台,设置-常规:WordPress 地址(URL)和 站点地址(URL)修改为你的地址
    3. 修改网站文件夹名称,也就是删除原来的 banzhuanriji.com,把abc.banzhuangriji.com,修改为banzhuanriji.com
    4. 重启Nginx

    5. 安装需要的插件

    我是所有都设置好之后才修改域名的,现在我点击主题的自定义,就会先显示几条错误提示,再显示自定义网页页面。错误内容如下:

    
    Warning: Undefined array key "mp_featuredimg_1" in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 1130
    
    Warning: Trying to access array offset on value of type null in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 1130
    
    Warning: Undefined array key "mp_featuredimg_1" in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 1131
    
    Warning: Trying to access array offset on value of type null in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 1131
    
    Warning: Undefined array key "mp_featuredimg_1" in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 603
    
    Warning: Trying to access array offset on value of type null in /www/wwwroot/banzhuanriji.com/wp-includes/class-wp-customize-widgets.php on line 603

    貌似是Blocky插件的问题,到现在我都不知道怎么解决…

    6. 其他

    关于安装的插件和主题,有兴趣的话可以查看关于页面。

    如果你没有想使用Wordpress,那么我推荐你使用Tp2MD,可以导出到Markdown文件,你经过简单的修改可以直接在一些hexo,hugo,nextjs或者astro等可以使用Markdown文件的博客系统。