在WordPress Timber中为自定义分类筛选器添加默认全选选项
解决自定义分类筛选下拉添加默认“全部”选项的问题
问题背景
我创建了slug为typology、名称为Typologies的自定义事件分类,包含子项type 1、type 2、type 3。已通过Timber实现分类筛选下拉,但尝试添加默认选中的“All Typologies”选项未成功。
原代码问题点
- PHP中传递的变量名是
terms-typology,但Twig模板里循环的是typology,变量名不匹配,导致分类项无法正确渲染 - 错误地通过
new Timber\Term('typology')获取分类对象来生成默认选项,逻辑不符合需求
可行解决方案
步骤1:修正PHP代码(保持分类数据传递正确)
无需修改原有获取分类的逻辑,确保变量名清晰:
// 获取typology分类下的所有子项 $context['typology_terms'] = Timber::get_terms('typology'); // 可选:传递分类名称到模板,避免硬编码 $context['typology_name'] = 'Typologies';
步骤2:修改Twig模板,添加默认选项
在循环前插入默认选中的选项,value设为空字符串(用于后端判断未筛选状态),然后循环渲染分类子项:
<select> <!-- 默认选中的全部选项 --> <option selected value="">All {{ typology_name }}</option> <!-- 循环渲染分类子项 --> {% for term in typology_terms %} <option value="{{ term.slug }}">{{ term.name }}</option> {% endfor %} </select>
补充说明
- 默认选项的
value设为空字符串,后端处理筛选逻辑时,若获取到空值则返回所有文章 - 若不需要单独传递分类名称,也可以直接硬写文本:
<option selected value="">All Typologies</option> - 循环中使用
term.slug作为value更符合筛选逻辑(后端通常通过slug筛选),而非直接输出term对象
内容的提问来源于stack exchange,提问作者Paraiso
相关产品推荐
相关产品推荐

