标签 WordPress 下的文章

一大早收到腾讯云漏洞通知的邮件,显示 1Panel 命令注入漏洞 CVE-2025-54424,等级是高危,查了下这是 V2 版本才有的漏洞,我 V1 你提示个 der?

不过几个服务器基本都是 Proxy 用,没放什么东西,看了下官方更新记录 V2.0.6 已经修复了这个问题,索性花一点时间把 1Panel 升级到 V2 尝尝鲜。

CVE-2025-54424 目前影响返回仅 V2.0.0 ~ V2.0.5,V1 用户不在此次楼都影响范围内,可以不用升级。当然跟我一样想升级 V2 尝鲜除外。

因为我现在还是 V1.10.32,所以还得先想办法升级到 V2 再升级 2.0.6,好在查了下官方已经有迁移脚本了:

郑重提醒

升级有风险,操作需谨慎。一切操作请提前备份好文件或创建磁盘快照。

安装升级脚本

此处以 X86 架构为例,升级版本为 v2.0.6,如果使用其它加购或要升级到其它版本请参考官方数据迁移脚本 1panel-migrator

# 1. 进入临时目录
cd /tmp

# 2. 下载适用于您服务器架构的二进制文件(以 amd64 架构为例)
wget https://gitee.com/fit2cloud-feizhiyun/1panel-migrator/releases/download/v2.0.6/1panel-migrator-linux-amd64

# 3. 添加执行权限
chmod +x 1panel-migrator-linux-amd64

# 4. 移动至系统 PATH 中并重命名
mv 1panel-migrator-linux-amd64 /usr/local/bin/1panel-migrator

升级1Panel

V2 版本开始,1Panel 划分了主节点和从节点,简单解释如下:

主节点从节点
支持外部访问
包含 1panel-core 和 1panel-agent 两个服务
包含V1社区版所有功能
受主节点管理,不支持外部访问
仅包含 1panel-agent 服务
没有付费购买专业版就可以忽略这个功能了

升级过程分为两步:升级服务 和 升级网站,务必先完成服务升级,再进行网站升级。

# 升级服务
1panel-migrator upgrade core

# 升级网站,需确保 V2 服务启动成功后再执行该命令。
1panel-migrator upgrade website

问题及解决方案

升级指令参见:upgrade.md,过程其实还算顺利,只是我也遇到了一些问题,在此也记录一下我的修复方案,仅供参考:

Q1:升级后PHP网站会更新为静态网站。

这是因为V2开始支持多个PHP网站共用一个PHP容器了,是一个比较大的改动升级,升级1Panel后建议卸载旧的PHP运行环境,重新安装一个新的PHP运行环境,再编辑网站重新设置PHP版本即可。

Q2:升级后反向代理网站的缓存全部关闭了。

此处也是V2版本的一处大改动,重新开启缓存即可。

Q3:升级过程遇到 -bash: docker-compose: command not found 相关错误?

遇到这个问题首先试一下 docker compose --version 能否执行,如果可以建议直接挂在软链接 sudo ln -s $(which docker) /usr/local/bin/docker-compose 重试,否则可能需要重新安装compose。

Q4:升级过程遇到 migrator v1 to v2 core failed, err: SQL logic error: no such table: mcp_servers (1) 相关错误?

这个错误是我 飞牛NAS 里的 1Panel 升级时遇到的,因为飞牛应用商店安装的 1Panel 版本非常陈旧,当初根据飞牛论坛的帖子升级到 V1 最新版后一直没有发现问题,但是其实升级后的 1Panel 是没有 AI 菜单的。

根据错误信息我搜索到了 1Panel 论坛有相关的帖子以及修复方案

# 下载新版v1 1Panel
wget https://resource-fit2cloud-com.oss-cn-hangzhou.aliyuncs.com/1panel/package/stable/v1.10.32-lts/release/1panel-v1.10.32-lts-linux-amd64.tar.gz
# 解压
tar -xzvf 1panel-v1.10.32-lts-linux-amd64.tar.gz
# 然后找到其中的 1panel 二进制文件 替换到你 /usr/loca/bin 下面 然后重启

需要注意的是如果你是 飞牛NAS 应用商店安装的 1Panel 可能重启后会发现依然没有 AI 菜单,此时可以尝试拷贝 1panel 文件到 /vol1/@appcenter/1Panel/bin 再重启应该就有AI菜单并可以升级了。

Enjoy 1Panel V2

虽然虚惊一场,但是也借此机会花了大概一早上的时间。将三台服务器的 1Panel 升级到了 V2,前段时间把博客丢到 NAS 里了,结果今天因为 Q4 那个问题导致博客宕机了一上午,不过问题不大,总算都升级完毕了。

参考链接

这个教程网上都转烂了,但是使用的都是图片显示等级,有一段时间追求极简,我就疯狂的压缩主题,能不用图片坚决不用,于是这个东西就诞生了,也没怎么在意,现在换到Typecho之后,更是不关注这东西了,但是今天@欧爹突然提起这个功能,想让我帮他折腾上,于是我就找到之前的主题,将代码拿出来,整理一下就发给他了。

终于有机会帮上欧爹了,我牟足了干劲,想办法满足欧爹的奇葩要求(考虑到他博客火爆程度,他嫌原本的7级不够用,于是稍微增加到了10级)

其实最烦人的就是选色,也还好,有了色阶选起来也不是特别难受,最终效果我感觉还是很不错的(详见上图) 技术含量很低,为了凑字数,打了那么多字,下面就上本篇文章的重点吧

下方代码放进functions.php内

//获取访客VIP样式
function get_author_class($comment_author_email,$user_id){
global $wpdb; $author_count = count($wpdb->get_results( "SELECT comment_ID as author_count FROM $wpdb->comments WHERE comment_author_email = '$comment_author_email' ")); 
/*如果不需要管理员显示VIP标签,就把下面一行的“//”去掉*/
//$adminEmail = get_option('admin_email');if($comment_author_email ==$adminEmail) return;
if($author_count>=5 && $author_count<10) echo '<a class="vip1" title="LV.1">LV.1</a>';
else if($author_count>=10 && $author_count<50) echo '<a class="vip2" title="LV.2">LV.2</a>';
else if($author_count>=50 && $author_count<150) echo '<a class="vip3" title="LV.3">LV.3</a>';
else if($author_count>=151 && $author_count<300) echo '<a class="vip4" title="LV.4">LV.4</a>';
else if($author_count>=301 &&$author_count<450) echo '<a class="vip5" title="LV.5">LV.5</a>';
else if($author_count>=451 && $author_count<550) echo '<a class="vip6" title="LV.6">LV.6</a>';
else if($author_count>=551 && $author_count<700) echo '<a class="vip7" title="LV.7">LV.7</a>'; 
else if($author_count>=701 && $author_count<850) echo '<a class="vip8" title="LV.8">LV.8</a>'; 
else if($author_count>=851 && $author_count<1050) echo '<a class="vip9" title="LV.9">LV.9</a>'; 
else if($author_count>=1200) echo '<a class="vip10" title="神一样的人物 V1000+">LV.10</a>'; }
//认证用户
function comment_links_title($email = ''){
$links=array( 
'1'=>'test@163.com', 
'2'=>'test@gmail.com', 
'3'=>'test@qq.com', );
//添加你想要设置个性图片的评论者Email,格式参考我写的
if(in_array($email,$links)) echo '<a class="vp" title="认证用户">认证</a>';
} 

将下方代码放进评论内容循环内需要显示的地方

<?php comment_links_title($comment->comment_author_email);//认证
if(user_can($comment->user_id, 1)){echo "<a title='本站博主' class='vip'>博主</a>";}; //博主
get_author_class($comment->comment_author_email,$comment->user_id);//等级?>

**下面是CSS,样式仅供参考**

/*评论者VIP显示功能的样式*/
.vp,.vip,.vip1,.vip2,.vip3,.vip4,.vip5,.vip6,.vip7,.vip8,.vip9,.vip10{overflow:hidden;padding:0 4px;color:#fff !important;margin:0 6px 0 0;} .vp:hover,.vip:hover,.vip1:hover,.vip2:hover,.vip3:hover,.vip4:hover,.vip5:hover,.vip6:hover,.vip7:hover,.vip8:hover,.vip9:hover,.vip10:hover{background:#aaa;}
.vp{background:#2ae;}
.vip{background:#90EE90;} 
.vip1{background:#C1FFC1;} 
.vip2{background:#98FB98;} 
.vip3{background:#7FFF00;} 
.vip4{background:#FFEC8B;} 
.vip5{background:#FFC125;} 
.vip6{background:#FFA500;} 
.vip7{background:#C6E2FF;} 
.vip8{background:#A4D3EE;} 
.vip9{background:#7EC0EE;} 
.vip10{background:#EE2C2C;}
至此,本篇文章结束

最近想给博客添加一个分类,但是鉴于新开办的分类并不是那么重要,所以不想让其在首页列表显示,当然需要排除掉,网上普遍的方式是修改主题的index.php或loop.php里的代码,虽然对于我来说改起来还是轻而易举,但是如果主题同时包含多个列表文件,那是就要一个个排除了,不怎么方便,于是找到了下面的这个方法,简单方便,直接修改functions.php就OK了。

下面的方法可以帮你方便地在首页排除特定分类的文章。

复制下面的代码到你的主题functions.php文件:

function exclude_category_home( $query ) {
if ( $query->is_home ) {
$query->set( 'cat', '-99, -999' );
}
return $query;
}
add_filter( 'pre_get_posts', 'exclude_category_home' );

修改第3行的分类ID,然后保存文件,就大功告成了。“-”号就是排除的意思。

很多时候我们需要将某些内容在指定的页面中显示,例如把友情链接这只成只在首页显示,或者将广告设置为只在文章页显示,这些都可以通过修改代码来达到效果。

下面为常用的页面判断语句

  1. is_home()     ====主页
  2. is_single()     ==== 文章页
  3. is_page()     ==== 页面
  4. is_category()     ==== 文章分类页
  5. is_tag()      ====文章标签页
  6. is_archive()     ==== 归档页
  7. is_404()     ==== 404页
  8. is_search()     ==== 搜索结果页
  9. is_feed()     ==== 订阅页
知道了这些语句后,我们如何使用呢?举个例子:

我要将“天空团首页”五个字设置为只显示在首页,那么可以这样,<?php if ( is_home() ) { ?>天空团首页<?php } ?>

上方示例中黄色加粗部分可以任意替换,可以判断 is_single()  [只在文章页显示]或 is_archive() [归档页显示]等等方式

既然可以设置为只在某页显示某内容,那么可不可以设置成只在某页禁止显示某内同呢?答案是肯定的

语法小注:|| 表示或,&& 表示和,! 表示非,使用上面的语法便可以更加灵活的定义页面显示内容了,语法示例如下:

  1. !is_home()      ====除首页以外的页面都显示
  2. !is_category(4)     ====仅在ID非4的分类显示
  3. is_home() || is_category(‘movies’)      ====在首页显示同时在名称为movies的分类显示
  4. is_page(‘about’)      ====仅在名称为about的页面显示
  5. is_home()&&!is_paged()     ==== 在首页显示,分页不显示
OK,到此结束,祝大家中秋快乐

折腾主题会经常见到wordpress的头部多了很多没有用的信息,比如wordpress版权、wordpress RSS、外部博客接口、短链接网址、wordpress自带脚本等。

对于一个折腾主题的爱好者,这些东西可是不允许存在的,我上网搜了一下,其实这一切都是wordpress的wp_head() 在作怪了。下面与大家分享怎么移除这些内容。

大家根据需要移除不需要的函数就可以了。

<?php //remove_action( 'wp_head', 'wp_enqueue_scripts', 1 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); remove_action( 'wp_head', 'index_rel_link' ); remove_action('wp_head', 'parent_post_rel_link', 10, 0 ); remove_action('wp_head', 'start_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); //remove_action( 'wp_head', 'locale_stylesheet' ); remove_action( 'publish_future_post', 'check_and_publish_future_post',10, 1 ); //remove_action( 'wp_head', 'noindex', 1 ); //remove_action( 'wp_head', 'wp_print_styles', 8 ); //remove_action( 'wp_head', 'wp_print_head_scripts', 9 ); remove_action( 'wp_head', 'wp_generator' ); //remove_action( 'wp_head', 'rel_canonical' ); remove_action( 'wp_footer', 'wp_print_footer_scripts' ); remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 ); remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 ); add_action('widgets_init', 'my_remove_recent_comments_style'); function my_remove_recent_comments_style() { global $wp_widget_factory; remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'] ,'recent_comments_style')); } ?>
下面说说具体使用和作用

1、移除WordPress版本

在head区域,可以看到如下代码:

<meta name="generator" content="WordPress 3.1.2" />

这是隐性显示的WordPress版本信息,默认添加。可以被黑客利用,攻击特定版本的WordPress漏洞。清除代码:

remove_action( 'wp_head', 'wp_generator' );

2、移除离线编辑器开放接口

remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' );

3、移除前后文、第一篇文章、主页meta信息

remove_action( 'wp_head', 'index_rel_link' ); // Removes the index link remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); // Removes the prev link remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); // Removes the start link remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); // Removes the relational links for the posts adjacent to the current post.

4、移除feed

remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );

最后我的效果图,去的还算干净:

到这里你的头部也就干净了。话说还可以移除一个3.0以后添加的js,不过看了一下,只有在本地那个代码才会出现,所以就没必要了,如果你有什么要补充的,欢迎留言。

文章整编自:主题吧