bbpress广告插件php8修复记录和新建功能首页顶部和底部简码
› VFX大学 › bbPress 论坛系统(bbPress Forum System) › bbpress广告插件php8修复记录和新建功能首页顶部和底部简码
- This topic has 1 个回复, 1 个参与人, and was last updated 9 小时, 10 分 前 by
追光.

- 作者帖子
- 2025年7月13日 - 下午4:25 #554
追光管理员为了使该插件适配 PHP 8 并提高性能,我们需要进行以下几类调整,如果不想自己重新优化测试,可以直接使用社区重新构建,并正在使用的版本,插件无任何广告,界面清晰简洁:
✅ 1. 全局 IF 和函数调用的语法修正
PHP 8 不再允许在全局作用域中使用大写 IF、ELSE 等关键字(如 IF (isset(…))),需要全部改为小写 if。🔧 修改内容:
php
// 原代码IF (isset($GET[\'sauaction\'])){ $sauaction = sanitizetextfield($GET[\'sauaction\']); } IF (isset($GET[\'sauid\'])){ $sauid = sanitizetextfield($GET[\'sauid\']); }
// 修改为
if (isset($GET[\'sauaction\'])) { $sauaction = sanitizetextfield($GET[\'sauaction\']); } if (isset($GET[\'sauid\'])) { $sauid = sanitizetextfield($GET[\'sauid\']); }
✅ 2. 使用严格比较 (=== / !==) 替代松散比较 (== / !=)
PHP 8 更加注重类型安全,建议将所有松散比较替换为严格比较以避免类型转换问题。🔧 示例修改:
php
// 原代码if ($bbpsauoptvals[\'positions\'][$sauid][\'hidefromusers\'] == TRUE) { ... }
// 修改为
if ($bbpsauoptvals[\'positions\'][$sauid][\'hidefromusers\'] === true) { ... }
其他类似地方也需要统一替换,比如:
if ($sauaction == \'edit\') if ($value[\'adcode\'] == \'\') if ($bbpsaurunonce == 1)
等等
✅ 3. 显式声明函数参数类型和返回类型
PHP 8 支持更严格的函数签名。我们可以添加类型提示以提升可读性和运行效率。🔧 修改示例:
phpfunction sauishidden($location) { ... } function saudisplayad($location) { ... }
✅ 改为:
phpfunction sauishidden(string $location): bool { ... } function saudisplayad(string $location): string { ... }
对于 WordPress 钩子中的回调函数,也要加上合适的类型提示(如果可能):
php
function bbpsaufilterbetweenposts( $content, $replyid ) { ... }
✅ 改为:
phpfunction bbpsaufilterbetweenposts( string $content, int $replyid ): string { ... }
⚠️ 注意:WordPress 的某些钩子参数可能不是字符串/整数,请确保你了解每个钩子的实际传参类型后再添加类型提示。
✅ 4. 移除废弃的 createfunction() 和 eval() 使用
这个插件目前没有使用这些函数,无需处理。✅ 5. 使用 [] 而非 array()
PHP 8 推荐使用更简洁的数组语法 [],虽然不影响功能,但可以提升代码现代性与性能微幅优化。🔧 示例:
php$links = array( \'message\' = \'Sign in to remove ads: \', ... );
// 修改为
$links = [ \'message\' = \'Sign in to remove ads: \', ... ];
同样适用于 $positions、$newoptions 等变量定义。
✅ 6. 使用 htmlspecialchars() 或 eschtml() 输出 HTML 安全内容
虽然插件已经用了 WordPress 自带的 escurl()、sanitizetextfield() 等函数,但在输出部分可以进一步增强安全性。例如:
phpecho \'配置已保存\';
✅ 可以改为:
phpecho \'\' . eschtml(\'配置已保存\', \'bbpress-simple-advert-units\') . \'\';
如果你希望支持多语言,还可以加上文本域 \’bbpress-simple-advert-units\’。
✅ 7. 启用 OPcache 编译缓存
这不是代码改动,而是服务器层面的优化。你可以建议用户开启 OPcache 来显著提升 PHP 性能。✅ 8. 使用 declare(stricttypes=1) 开启严格模式
在文件顶部添加:php
<?php declare(strict_types=1);
这会强制所有函数调用都必须满足类型提示要求,提升健壮性。
⚠️ 注意:启用前请确保所有函数都已正确添加类型提示。
✅ 9. 删除不必要的 @ 错误抑制符
如果有错误抑制符(如 @printr(...)),应删除并处理潜在错误。✅ 10. 使用命名空间(可选)
虽然插件是传统 WordPress 插件风格,不推荐也不需要强命名空间化,但如果将来重构,可以考虑拆分为命名空间以提高性能和结构清晰度。📋 总结:需要做的具体更改如下
| 类型 | 修改位置 | 操作 |
| 语法修正 | 所有 IF, ELSE IF | 改为 if, elseif |
| 类型提示 | 所有函数定义 | 添加参数和返回类型 |
| 数组语法 | 所有 array() | 改为 [] |
| 严格比较 | 所有 == / != | 改为 === / !== |
| OPcache | 服务器配置 | 开启 OPcache |
| 严格模式 | 文件头部 | 加上 declare(stricttypes=1); |
| 安全输出 | 所有 HTML 输出 | 使用 eschtml() / escattr() | - 2025年7月13日 - 下午4:42 #562
追光管理员问题:使用了 [#bbp-topic-index] 短代码来展示论坛首页内容,但 广告在首页不显示 。即使切换到 bbPress 默认的首页模板(如 archive-forum.php),广告仍然不显示,尤其是在以下两个位置:
'adunit_main_header' 'adunit_main_footer'
解决方案:
可以在这个插件的尾部 (靠近 sau_display_ad() 函数后面)添加两个新的 简码(Shortcode) ,用于在页面中手动插入广告单元:[#bbp_sau_header]:显示 'adunit_main_header' 的广告 [#bbp_sau_footer]:显示 'adunit_main_footer' 的广告
这样你就可以在任何使用短代码的地方(比如页面、文章、或者 [#bbp-topic-index] 所在页面)插入这两个广告位。
// 新增 shortcode 支持:[#bbp_sau_header] function sau_bbp_sau_header_shortcode() { $location = 'adunit_main_header'; if (sau_is_hidden($location)) { return ''; } return sau_display_ad($location); } add_shortcode('bbp_sau_header', 'sau_bbp_sau_header_shortcode'); // 新增 shortcode 支持:[#bbp_sau_footer] function sau_bbp_sau_footer_shortcode() { $location = 'adunit_main_footer'; if (sau_is_hidden($location)) { return ''; } return sau_display_ad($location); } add_shortcode('bbp_sau_footer', 'sau_bbp_sau_footer_shortcode');
将以下内容插入到你的页面或文章中:
[#bbp_sau_header] [#bbp-topic-index] [#bbp_sau_footer]
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。