挂件头衔✨️靓标库🧚‍♂️名人堂🦄宝可梦🍎水果机🥊猜拳🏧黑市🏧银行💹抽奖
   🎁
返回列表 发布新帖
查看: 227|回复: 0

[代码技巧] 子比主题 – 论坛发帖标签必选功能

[复制链接]
社区贡献

331

主题

204

回帖

2万

积分

等级头衔
Icon组别 : 管理员
Icon等级 :

积分成就
   钻石 : 293 颗
   贡献 : 491 点
   金币 : 24 枚
Icon在线时间 : 1756 小时
Icon注册时间 : 2024-11-22
Icon最后登录 : 2026-6-17

荣誉勋章

累计签到LV.3任务·年会员幸运抽奖·皇幸运抽奖·尊幸运抽奖·豪起源之星摩羯座推广LV.2钻石LV.1注册一周年

总共送礼:1 个    总共收礼:0 个

功勋·创世元老

飞流名人堂成员 1 FLLTCN 实名认证 特邀大神 诚信商家 信誉担保 精华作者+ 官方团队 vip vip-year 发表于 2025-10-10 18:29:49 | 查看全部 |阅读模式 浙江金华

交易无需等待,成交就是现在,全面资源整合网络大咖云集,让你轻松玩转互联网!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
这是一款子比论坛的一个功能,就是有很多论坛的人要用到的,有些人喜欢发帖子,但是缺不选择标签,包括用户发帖也不喜欢填写标签,今天腾飞博客给大家分享一个必选标签的功能,喜欢的自行部署吧!

tengfei_down - 2025-10-10T182914.977.webp

代码部署


将下面的代码放到:/wp-content/themes/zibll/func.php文件里面,如果没有这个文件,记得自己创建一个,记得加上php头,要不然会报错!
  1. /**
  2. * 论坛发帖标签必选功能
  3. * 此功能确保用户在发布论坛帖子时必须选择至少一个标签
  4. */


  5. function jipan_bbs_tag_required_early_check() {

  6.     if (
  7.         defined('DOING_AJAX') &&
  8.         DOING_AJAX &&
  9.         isset($_REQUEST['action']) &&
  10.         $_REQUEST['action'] === 'bbs_posts_save'
  11.     ) {
  12.         global $zib_bbs;
  13.         
  14.         // 首先检查标题
  15.         $post_title = !empty($_REQUEST['post_title']) ? strip_tags(trim($_REQUEST['post_title'])) : '';
  16.         if (!$post_title) {
  17.             $response = array(
  18.                 'error' => 1,
  19.                 'msg' => '请填写标题',
  20.                 'ys' => 'danger'
  21.             );
  22.             
  23.             header('Content-Type: application/json');
  24.             echo json_encode($response);
  25.             exit;
  26.         }
  27.         
  28.         $title_strlen_limit = _pz('bbs_post_title_strlen_limit') ?: array('min' => 5, 'max' => 30);
  29.         if ($title_strlen_limit['max'] && zib_new_strlen($post_title) > $title_strlen_limit['max']) {
  30.             $response = array(
  31.                 'error' => 1,
  32.                 'msg' => '标题太长了,不能超过' . $title_strlen_limit['max'] . '个字',
  33.                 'ys' => 'danger'
  34.             );
  35.             
  36.             header('Content-Type: application/json');
  37.             echo json_encode($response);
  38.             exit;
  39.         }
  40.         
  41.         if ($title_strlen_limit['min'] && zib_new_strlen($post_title) < $title_strlen_limit['min']) {
  42.             $response = array(
  43.                 'error' => 1,
  44.                 'msg' => '标题太短!',
  45.                 'ys' => 'danger'
  46.             );
  47.             
  48.             header('Content-Type: application/json');
  49.             echo json_encode($response);
  50.             exit;
  51.         }
  52.         
  53.         // 然后检查板块
  54.         $plate = !empty($_REQUEST['plate']) ? (int) $_REQUEST['plate'] : 0;
  55.         if (!$plate) {
  56.             $response = array(
  57.                 'error' => 1,
  58.                 'msg' => '请选择' . ($zib_bbs ? $zib_bbs->plate_name : '板块'),
  59.                 'ys' => 'danger'
  60.             );
  61.             
  62.             header('Content-Type: application/json');
  63.             echo json_encode($response);
  64.             exit;
  65.         }
  66.         
  67.         // 最后检查标签
  68.         $has_valid_tag = false;
  69.         $tag_g = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : array();
  70.         
  71.         if (is_array($tag_g)) {
  72.             foreach ($tag_g as $tag_id) {
  73.                 if (!empty($tag_id)) {
  74.                     $has_valid_tag = true;
  75.                     break;
  76.                 }
  77.             }
  78.         }
  79.         
  80.         // 如果没有有效标签,返回错误
  81.         if (!$has_valid_tag) {
  82.             $response = array(
  83.                 'error' => 1,
  84.                 'msg' => '请选择标签',
  85.                 'ys' => 'danger'
  86.             );
  87.             
  88.             // 输出JSON响应并结束执行
  89.             header('Content-Type: application/json');
  90.             echo json_encode($response);
  91.             exit;
  92.         }
  93.     }
  94. }

  95. add_action('init', 'jipan_bbs_tag_required_early_check', 1);


  96. function jipan_bbs_required_tag_js() {
  97.     ?>
  98.     <script type="text/javascript">
  99.     jQuery(document).ready(function($) {
  100.         // 添加"(必选)"标记到标签选择器
  101.         function addRequiredLabelToTags() {
  102.             $('.tag-drop').each(function() {
  103.                 var $tagDrop = $(this);
  104.                 var $tagLabel = $tagDrop.find('.drop-btn .flex.ac').first();
  105.                
  106.                 if ($tagLabel.length) {
  107.                     var labelText = $tagLabel.text().trim();
  108.                     if (labelText.indexOf('(必选)') === -1) {
  109.                         // 找到文本节点并在其后添加"(必选)"标记
  110.                         var $icon = $tagLabel.find('i, .fa, .icon, svg').first();
  111.                         if ($icon.length) {
  112.                             // 如果有图标,在图标后面插入必选标记
  113.                             $icon.after('<span class="ml5 mr5 c-red">(必选)</span>');
  114.                         } else {
  115.                             // 在第一个子元素后插入
  116.                             $tagLabel.prepend('<span class="c-red">(必选)</span><span class="mr5"></span>');
  117.                         }
  118.                     }
  119.                 }
  120.             });
  121.         }
  122.         

  123.         setTimeout(addRequiredLabelToTags, 500);

  124.         $(document).on('click', '.posts-submit', function(e) {
  125.             // 首先检查标题
  126.             var $form = $('#bbs-posts-edit');
  127.             var $titleInput = $form.find('input[name="post_title"]');
  128.             var title = $titleInput.val().trim();
  129.             
  130.             if (!title) {
  131.                 e.preventDefault();
  132.                 e.stopImmediatePropagation();
  133.                
  134.                 if (window.notyf) {
  135.                     window.notyf('请填写标题', 'danger');
  136.                 } else {
  137.                     alert('请填写标题');
  138.                 }
  139.                
  140.                 $titleInput.focus();
  141.                 return false;
  142.             }
  143.             
  144.             // 然后检查板块
  145.             var $plateInput = $form.find('input[name="plate"]');
  146.             var plate = $plateInput.val();
  147.             
  148.             if (!plate) {
  149.                 e.preventDefault();
  150.                 e.stopImmediatePropagation();
  151.                
  152.                 if (window.notyf) {
  153.                     window.notyf('请选择板块', 'danger');
  154.                 } else {
  155.                     alert('请选择板块');
  156.                 }

  157.                 var $plateDrop = $form.find('.plate-drop');
  158.                 if ($plateDrop.length) {
  159.                     $('html, body').animate({
  160.                         scrollTop: $plateDrop.offset().top - 100
  161.                     }, 200);
  162.                 }
  163.                
  164.                 return false;
  165.             }
  166.             
  167.             // 最后检查标签
  168.             var $tagInputs = $form.find('input[name="tag[]"]');
  169.             var hasTag = false;
  170.             
  171.             $tagInputs.each(function() {
  172.                 if ($(this).val()) {
  173.                     hasTag = true;
  174.                     return false;
  175.                 }
  176.             });
  177.             
  178.             if (!hasTag) {
  179.                 e.preventDefault();
  180.                 e.stopImmediatePropagation();
  181.                
  182.                 if (window.notyf) {
  183.                     window.notyf('请选择标签', 'danger');
  184.                 } else {
  185.                     alert('请选择标签');
  186.                 }
  187.                
  188.                 var $tagDrop = $form.find('.tag-drop');
  189.                 if ($tagDrop.length) {
  190.                     $('html, body').animate({
  191.                         scrollTop: $tagDrop.offset().top - 100
  192.                     }, 200);
  193.                 }
  194.                
  195.                 return false;
  196.             }
  197.         });
  198.     });
  199.     </script>
  200.     <?php
  201. }
  202. add_action('wp_footer', 'jipan_bbs_required_tag_js', 99);
复制代码


本帖被以下淘专辑推荐:

路虽远,行则将至;事虽难,做则必成。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

飞流广播+ 发布

系统消息:飞流安卓客户端APP已上线,请在QQ群(123129)群文件内获取下载。
02-21 02:22
01-24 12:40
站内通告

📢 六月份后均不在线,请悉知

提供资源交易、信息共享、靓号交流、技术变现、学习问答、兴趣娱乐等全面服务。

1.丰富功能系统,扩展社区特色玩法,打造最好的互联网聚集圈子。

2.准确信息真实交易,安全快捷又方便,让虚拟交易面对面。

3. 天上不会掉馅饼,话术骗术迷人心,切勿脱离平台线下交易,被骗与平台无关!

4. 欺诈骗钱,违规违法将视情受到警告&禁言&封号甚至检举至👮🏻‍♀️处理!

官方Q群:1003810038钉推群:BAYR2383 站长QQ:3388700000

飞流论坛(FLLT.CN),一个专注于资源信息发布、虚拟网络交易、技术学习与娱乐社交的交流平台。
  • 钉钉新帖推送群
  • 官方交流QQ群
  • 站长唯一微信号

💥客户端|🧿小黑屋|📴手机页|飞流网 |网站地图

GMT+8, 2026-6-17 12:55 , Processed in 0.080152 second(s), 76 queries, MemCached On , Gzip On.

飞流论坛 HanAnalytics icp

Copyright © 2024-2026 飞流网 版权所有 All Rights Reserved. X3.5

快速回复 返回顶部 返回列表