bbpress广告插件php8修复记录和新建功能首页顶部和底部简码

VFX大学 bbPress 论坛系统(bbPress Forum System) bbpress广告插件php8修复记录和新建功能首页顶部和底部简码

正在查看 1 条回复
  • 作者
    帖子
    • #554

      追光
      管理员

      为了使该插件适配 PHP 8 并提高性能,我们需要进行以下几类调整,如果不想自己重新优化测试,可以直接使用社区重新构建,并正在使用的版本,插件无任何广告,界面清晰简洁:

      bbPress广告插件完全重构Php8性能优化版下载

      ✅ 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 支持更严格的函数签名。我们可以添加类型提示以提升可读性和运行效率。

      🔧 修改示例:
      php

      function sauishidden($location) { ... }
      function saudisplayad($location) { ... }

      ✅ 改为:
      php

      function sauishidden(string $location): bool { ... }
      function saudisplayad(string $location): string { ... }

      对于 WordPress 钩子中的回调函数,也要加上合适的类型提示(如果可能):

      php

      function bbpsaufilterbetweenposts( $content, $replyid ) { ... }

      ✅ 改为:
      php

      function 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() 等函数,但在输出部分可以进一步增强安全性。

      例如:
      php

      echo \'配置已保存\';

      ✅ 可以改为:
      php

      echo \'\' . 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() |

    • #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]
      
正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。