WordPress Porto 主题后台一直提示 Porto Functionality 插件需要更新,如何隐藏?
在使用 WordPress 搭建外贸网站或企业官网时,很多人会选择 Porto 主题。Porto 主题功能比较完整,适合 WooCommerce、企业站、产品展示站等项目。
但是在实际项目中,尤其是网站克隆、迁移、复制部署之后,WordPress 后台可能会一直出现类似下面的提示:
html
The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: Porto Functionality.
Begin updating plugin
后台提示大概是这样的:
html
<div id="setting-error-tgmpa" class="notice notice-success settings-error is-dismissible">
<p>
<strong>
<span>
The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme:
<em>Porto Functionality</em>.
</span>
<span>
<a class="button button-primary" href="/wp-admin/admin.php?page=porto-setup-wizard&step=default_plugins">
Begin updating plugin
</a>
</span>
</strong>
</p>
<button type="button" class="notice-dismiss">
<span class="screen-reader-text">Dismiss this notice.</span>
</button>
</div>
如果这个网站只是自己使用还好,但如果后台需要交付给客户使用,这种提示就会显得不专业。尤其是克隆站点后,由于授权、主题包、插件包不一致,可能点击更新也无法正常更新。
本文记录一种比较安全、简单的方式:通过 MU 插件隐藏 Porto Functionality 更新提示。
一、为什么会出现这个提示?
Porto 主题依赖一个配套插件:
text
Porto Functionality
这个插件主要用于支持 Porto 主题的一些扩展功能,比如:
- Porto 自带短代码
- 主题扩展模块
- 页面构建相关功能
- WooCommerce 增强功能
- Header、Footer、模板相关功能
当 Porto 主题检测到 Porto Functionality 插件版本过低、缺失或者不匹配时,就会通过 TGMPA 机制在 WordPress 后台显示提示:
text
The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: Porto Functionality.
TGMPA 全称是:
text
TGM Plugin Activation
很多商业主题都会使用它来检测主题所需插件是否安装、启用或更新。
二、为什么不建议直接修改主题文件?
很多人第一反应是直接去主题文件里删除提示代码,比如修改:
text
wp-content/themes/porto/
wp-content/plugins/porto-functionality/
这种方式不推荐,原因有三个:
- 主题或插件一旦更新,修改内容会被覆盖。
- 修改商业主题核心文件,后期维护很麻烦。
- 不利于迁移和备份,换服务器后容易忘记改过哪里。
所以更推荐使用 WordPress 的 MU 插件方式。
三、什么是 MU 插件?
MU 插件的目录是:
text
wp-content/mu-plugins/
MU 插件的特点:
- 不需要在后台手动启用
- 放进去就会自动加载
- 客户一般不会在普通插件列表里看到
- 适合放一些后台增强、隐藏提示、全局修复类代码
所以,用 MU 插件隐藏后台提示,是一种比较干净的做法。
四、创建 MU 插件隐藏 Porto 提示
进入网站目录:
bash
cd /www/wwwroot/你的域名/wp-content/
mkdir -p mu-plugins
nano mu-plugins/hide-porto-notice.php
然后写入下面代码:
php
<?php
/**
* Plugin Name: Hide Porto TGMPA Notice
* Description: Hide Porto Functionality update notice in WordPress admin.
* Version: 1.0
*/
/**
* 隐藏 Porto Functionality 更新提示
* 只隐藏后台提示,不影响前台页面。
*/
add_action('admin_head', function () {
?>
<style>
#setting-error-tgmpa {
display: none !important;
}
.notice:has(a[href*="porto-setup-wizard"][href*="default_plugins"]) {
display: none !important;
}
</style>
<?php
}, 999);
/**
* 防止部分后台页面异步加载后再次显示
*/
add_action('admin_footer', function () {
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.notice, .settings-error').forEach(function (el) {
var text = el.innerText || '';
var html = el.innerHTML || '';
if (
text.includes('Porto Functionality') ||
html.includes('porto-setup-wizard') ||
el.id === 'setting-error-tgmpa'
) {
el.remove();
}
});
});
</script>
<?php
}, 999);
保存后,刷新 WordPress 后台,提示就会被隐藏。
五、代码说明
1. 通过 CSS 隐藏固定 ID
Porto 这个提示的外层 ID 通常是:
html
id="setting-error-tgmpa"
所以可以直接通过 CSS 隐藏:
css
#setting-error-tgmpa {
display: none !important;
}
2. 通过链接特征继续匹配
有时不同页面中提示的 ID 或 class 可能发生变化,但按钮链接一般会包含:
text
porto-setup-wizard
default_plugins
所以加上这一段:
css
.notice:has(a[href*="porto-setup-wizard"][href*="default_plugins"]) {
display: none !important;
}
这可以匹配包含 Porto 插件更新按钮的 notice。
3. 通过 JavaScript 二次移除
部分后台页面可能是动态加载提示,或者 CSS 没有及时生效,所以又加了 JavaScript 二次处理:
javascript
document.querySelectorAll('.notice, .settings-error').forEach(function (el) {
var text = el.innerText || '';
var html = el.innerHTML || '';
if (
text.includes('Porto Functionality') ||
html.includes('porto-setup-wizard') ||
el.id === 'setting-error-tgmpa'
) {
el.remove();
}
});
这样即使提示后加载,也可以被移除。
六、只对客户隐藏,管理员自己保留提示
有时候我们自己还想看到这些后台提示,只是不希望客户看到。
可以根据登录用户邮箱进行判断。
例如:
php
<?php
/**
* Plugin Name: Hide Porto Notice For Clients
* Description: Hide Porto Functionality update notice for client users only.
* Version: 1.0
*/
add_action('admin_head', function () {
$user = wp_get_current_user();
// 开发者邮箱,改成自己的管理员邮箱
$developer_emails = array(
'your-email@example.com'
);
// 开发者自己不隐藏提示
if (in_array($user->user_email, $developer_emails, true)) {
return;
}
?>
<style>
#setting-error-tgmpa {
display: none !important;
}
.notice:has(a[href*="porto-setup-wizard"][href*="default_plugins"]) {
display: none !important;
}
</style>
<?php
}, 999);
add_action('admin_footer', function () {
$user = wp_get_current_user();
$developer_emails = array(
'your-email@example.com'
);
if (in_array($user->user_email, $developer_emails, true)) {
return;
}
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.notice, .settings-error').forEach(function (el) {
var text = el.innerText || '';
var html = el.innerHTML || '';
if (
text.includes('Porto Functionality') ||
html.includes('porto-setup-wizard') ||
el.id === 'setting-error-tgmpa'
) {
el.remove();
}
});
});
</script>
<?php
}, 999);
把这里的邮箱:
php
'your-email@example.com'
改成自己的 WordPress 管理员邮箱即可。
这样客户账号登录后台时看不到提示,开发者账号登录后台时仍然可以看到。
七、注意事项
1. 这只是隐藏提示,不是修复版本兼容问题
这个方法只是让后台界面更干净,不代表 Porto Functionality 插件已经更新成功。
如果网站前台和后台功能都正常,只是不想让客户看到这个提示,可以这样处理。
但是如果出现下面这些问题,还是建议检查 Porto 主题和 Porto Functionality 插件版本是否匹配:
- 前台页面模块错乱
- Porto 短代码失效
- Header Builder 异常
- Footer Builder 异常
- WooCommerce 产品页面样式异常
- 页面构建器模块无法编辑
- 后台 Porto 设置无法保存
2. 不建议隐藏所有 WordPress notice
有些人会直接隐藏全部后台通知:
css
.notice {
display: none !important;
}
不建议这样做。
因为 WordPress 的后台通知里可能包含重要信息,比如:
- 插件报错
- PHP 版本警告
- 安全提醒
- 数据库更新提醒
- WooCommerce 状态提醒
本文代码只针对 Porto Functionality 相关提示,不会影响其他正常后台提示。
3. 克隆站点后要检查授权和插件版本
克隆 WordPress 网站时,最好检查这些内容:
- 主题是否完整
- 子主题是否存在
- 必要插件是否启用
- Porto Functionality 是否存在
- WPBakery / Elementor 等构建器是否正常
- WooCommerce 页面是否正常
- PHP 版本是否兼容
- 缓存插件是否需要重新配置
隐藏提示只是交付时的界面优化,不建议把它当成长期兼容性解决方案。
八、总结
Porto 主题后台提示:
text
The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: Porto Functionality.
通常是因为 Porto 主题检测到 Porto Functionality 插件版本不匹配。
如果网站是克隆站点,插件暂时无法更新,但前台和后台功能正常,可以通过 MU 插件隐藏这个提示。
推荐做法是:
text
wp-content/mu-plugins/hide-porto-notice.php
通过 CSS + JavaScript 精准隐藏 Porto Functionality 更新提示。
这种方式的优点是:
- 不修改主题文件
- 不影响前台
- 不影响其他后台通知
- 不容易被主题更新覆盖
- 适合客户后台交付
最终效果就是客户登录 WordPress 后台时,不会再看到 Porto Functionality 更新提示,后台界面更加干净专业。