修改B2主题多层级标签筛选

简介

B2原标签筛选是一个多级筛选项,可匹配一篇含有多个标签的文章,这个功能主要用于影视站或其他需要多个标签筛选一篇文章的内容站。

例如:一篇文章是美国电影,种类是科幻,年份是2025,那么给这篇文章设置了:美国,科幻,2025三个标签后,用户通过标签去选择这三个标签项,就会筛选出来这个文章。

但是,我用不到啊!!

我只想显示单一标签下的所有文章,我不可能一篇文章又是功能添加的,又是图标图片的,一篇文章牵扯多个标签。

所以怎么办?

改!!!

怎么改?!!!

看教程!!!!

子主题functions.php 中添加代码以便关联文件进行修改

require_once get_stylesheet_directory() . '/Modules/Templates/Archive.php';

通过以上路径,找到254行,也可搜索关键词:标签筛选

修改B2主题多层级标签筛选

 

找到上方图片中的内容后,从public方法名开始,整段替换

替换完成后,清理浏览器缓存

如果你跟我一样是多行标签,只希望用户点哪个标签就看哪个标签下的内容,不允许多个标签同时被选择,类似于菜单一样

那么你替换代码后,已经完成了修改,可以试一下。

[content_hide]

public static function filter_tag($tags, $term, $request, $_url) {
    if (empty($tags)) return;
 
    $is_tax = $term->taxonomy === 'post_tag';
 
    // 分行
    $tags = explode(PHP_EOL, $tags);
    $tags = array_filter($tags);
 
    $html = '';
    $i = 0;
    foreach ($tags as $k_l => $v_l) {
        $list = explode('|', $v_l);
        if ($list) {
            $i++;
            $name = $list[0];
            $list = explode(',', $list[1]);
            $list = array_filter($list);
 
            if (!empty($list)) {
 
                $a = '';
                foreach ($list as $k => $v) {
                    $_term = get_term_by('name', $v, 'post_tag');
 
                    if (isset($_term->term_id)) {
                        // 清除之前的标签筛选,重新构建URL
                        if ($is_tax) {
                            $url = get_term_link($_term->term_id) . $request;
                        } else {
                            // 构建新的URL,清除之前的筛选条件
                            $url = add_query_arg('tags', $_term->slug, $_url . $request);
                        }
 
                        // 标记当前标签为选中
                        $a .= '<a href="' . $url . '" class="' . ($term->slug === $_term->slug || (isset($_GET['tags']) && $_GET['tags'] == urldecode($_term->slug)) ? 'current' : '') . '" title="' . $v . '">' . $v . '</a>';
                    }
                }
 
                if ($a) {
                    if (!$is_tax) {
                        // 对于非分类页面,添加"全部"选项
                        $a = '<a href="' . (remove_query_arg('tags', $_url . $request)) . '" class="' . (!isset($_GET['tags']) ? 'current' : '') . '">' . __('全部', 'b2') . '</a>' . $a;
                    }
                    $html .= '<li><div class="filter-name">' . $name . ':</div><div class="filter-items">' . $a . '</div></li>';
                }
            }
        }
    }
 
    if ($html) {
        return $html;
    }
 
    return;
}

 

[/content_hide]

0 讨论
热门最新
总结
暂无总结
0 / 600