如何在WordPress归档页获取自定义分类法location术语
WordPress嵌套分类归档页获取自定义分类
location层级项方案 get_queried_object()默认仅返回主查询识别的核心查询对象,对于自定义重写实现的多分类嵌套URL结构,不会自动解析非主查询的分类段,可通过以下两种方式获取对应层级项:
方案1:直接解析URL路径匹配分类(无需修改现有规则,适配现有链接结构)
实现逻辑是拆分当前请求的URL路径,截取location标识和category标识之间的路径片段,按层级顺序匹配对应的自定义分类项:
- 先获取当前请求的路径,拆分成分段数组
- 定位
location和category两个分段的位置,截取中间的slug段 - 按父到子的层级顺序逐个匹配分类,避免不同父级下同slug的分类匹配错误
代码示例:
// 拆分当前请求路径 $request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); $path_segments = explode( '/', trim( $request_uri, '/' ) ); // 定位两个分类标识的位置 $loc_pos = array_search( 'location', $path_segments ); $cat_pos = array_search( 'category', $path_segments ); $location_hierarchy = []; if ( false !== $loc_pos && false !== $cat_pos && $cat_pos > $loc_pos ) { // 提取location层级的slug片段 $loc_slugs = array_slice( $path_segments, $loc_pos + 1, $cat_pos - $loc_pos - 1 ); $parent_term_id = 0; // 按层级顺序匹配分类,保证层级关系准确 foreach ( $loc_slugs as $slug ) { $current_term = get_term_by( 'slug', sanitize_title( $slug ), 'location', [ 'parent' => $parent_term_id ] ); if ( $current_term && ! is_wp_error( $current_term ) ) { $location_hierarchy[] = $current_term; $parent_term_id = $current_term->term_id; } } } // 调用示例:$location_hierarchy数组按父到子顺序存储location分类,索引0对应Scotland,索引1对应East Lothian foreach ( $location_hierarchy as $loc_term ) { // 输出分类名/链接等操作 echo esc_html( $loc_term->name ); }
方案2:重写规则绑定查询变量(规范实现方案,适合自定义开发的站点)
如果该嵌套URL结构是你通过自定义重写规则实现的,建议在注册规则时就将location层级的slug绑定到自定义查询变量,后续无需每次解析URL:
- 通过
query_vars钩子注册自定义查询变量,例如loc_level_1、loc_level_2 - 添加重写规则时,用正则捕获location段的slug,映射到对应查询变量
- 页面中直接通过
get_query_var('loc_level_1')获取Scotland的slug,get_query_var('loc_level_2')获取East Lothian的slug,再通过get_term_by转换为分类对象即可
注意:如果WordPress安装在子目录,解析路径前要先剔除子目录对应的路径段,避免分段位置偏移。如果站点启用了页面缓存,建议将该逻辑挂载到
template_redirect或更早的钩子执行,避免缓存导致取值异常。
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

