通过子主题覆盖父主题功能
NavXia 主题支持通过子主题覆盖部分父主题函数。你可以在不直接修改父主题文件的情况下,自定义网址导航的名称、固定链接、分类链接和搜索类型等内容。
使用子主题进行修改,可以避免父主题更新后覆盖已经修改的代码,也更方便后续维护和升级。
使用前准备
请先安装并启用 NavXia-Child 子主题,然后打开子主题目录中的 functions.php 文件:
/wp-content/themes/NavXia-Child/functions.php
将需要使用的覆盖代码添加到该文件中。
请注意:示例代码目前使用 /* 和 */ 进行了注释。如果需要启用对应功能,请移除函数前后的注释符号。
修改网址导航文章类型
create_tool_post_type() 函数用于覆盖父主题中网址导航文章类型的注册参数。
通过该函数,可以修改网址导航在后台显示的名称、菜单图标、支持的编辑功能以及详情页固定链接。
修改后台显示名称
示例代码将网址导航相关名称修改为“工具”,例如:
- 添加工具
- 编辑工具
- 所有工具
- 搜索工具
你可以根据网站类型,将这些文字修改为“游戏”“软件”“资源”“网站”或其他名称。
修改详情页固定链接
以下参数用于设置网址导航详情页的固定链接前缀:
'rewrite' => array(
'slug' => 'game',
),
设置后,网址导航详情页链接将使用以下格式:
https://example.com/game/内容别名/
你可以将 game 修改为自己需要的英文或数字,例如:
softwarewebsiteresourceapp
不建议使用中文、空格或特殊符号作为固定链接前缀。
文章类型支持的功能
示例代码中的网址导航支持以下编辑功能:
'supports' => array(
'title',
'editor',
'excerpt',
),
- title:标题。
- editor:正文编辑器。
- excerpt:摘要。
如果需要支持特色图片,可以在数组中增加 thumbnail:
'supports' => array(
'title',
'editor',
'excerpt',
'thumbnail',
),
修改网址导航分类法
create_tool_taxonomy() 函数用于覆盖网址导航分类、网址导航标签和特色标签的注册参数。
网址导航分类
tool_category 是网址导航使用的层级分类法,使用方式与 WordPress 文章分类目录类似,可以创建父级分类和子分类。
以下参数用于修改分类页面的固定链接前缀:
'rewrite' => array(
'slug' => 'game-category',
'with_front' => false,
'hierarchical' => true,
),
设置后,网址导航分类页面将使用以下链接格式:
https://example.com/game-category/分类别名/
网址导航标签
tool_tag 是网址导航使用的标签分类法,默认不支持父子层级。
以下参数用于修改标签页面的固定链接前缀:
'rewrite' => array(
'slug' => 'game-tag',
'with_front' => false,
'hierarchical' => true,
),
设置后,网址导航标签页面将使用以下链接格式:
https://example.com/game-tag/标签别名/
特色标签
feature_tag 用于在后台为网址导航设置特色属性。该分类法只在后台使用,不会生成前端归档页面。
'public' => false,
'publicly_queryable' => false,
'rewrite' => false,
示例代码使用以下回调函数,将特色标签显示为下拉选择框:
'meta_box_cb' => 'feature_tag_dropdown_metabox',
使用该设置前,请确保主题或子主题中已经存在 feature_tag_dropdown_metabox() 函数,否则编辑网址导航时可能无法正常显示特色标签选择框。
修改搜索类型名称
tool_search_type_dropdown() 函数用于修改网站搜索框中的内容类型选项。
示例代码将搜索类型显示为:
- 游戏
- 文章
$options = [
'tool' => __('游戏', 'xintheme'),
'post' => __('文章', 'xintheme'),
];
你可以将“游戏”修改为网站实际使用的内容名称,但数组键 tool 不要修改,因为它是主题内部使用的文章类型名称。
修正默认搜索类型
原示例中的默认值写成了 product:
$search_type = isset($_GET[$name]) && $_GET[$name] === 'post' ? 'post' : 'product';
由于搜索选项中使用的是 tool,这里应当将 product 修改为 tool:
$search_type = isset($_GET[$name]) && $_GET[$name] === 'post' ? 'post' : 'tool';
否则默认搜索类型可能无法正确选中“游戏”选项。
启用覆盖代码
示例中的每个函数都被单独注释,你可以只启用需要修改的部分。
例如,需要修改网址导航文章类型时,将以下结构:
/*function create_tool_post_type() {
// 自定义代码
}*/
修改为:
function create_tool_post_type() {
// 自定义代码
}
网址导航分类法和搜索筛选函数也使用相同的方法启用。
重新保存固定链接
修改文章类型或分类法的 slug 后,需要进入 WordPress 后台的“设置 → 固定链接”,直接点击“保存更改”。
重新保存固定链接后,WordPress 会更新链接重写规则,使新的网址结构生效。
如果修改后访问详情页或分类页出现 404 错误,通常可以通过重新保存固定链接解决。
注意事项
- 请将覆盖代码添加到 NavXia-Child 子主题中,不要直接修改父主题文件。
- 修改 PHP 文件前,建议先备份网站文件和数据库。
- 函数名称必须与父主题中的函数名称保持一致,否则无法覆盖原有功能。
- 父主题中的对应函数需要使用
function_exists()判断后再声明,子主题覆盖才能正常生效。 - 不要在父主题和子主题中重复声明同名函数,否则可能导致网站出现致命错误。
- 修改固定链接前缀后,原有链接可能失效,正式网站建议设置 301 重定向。
- 修改代码后,如果前端没有变化,请清理主题缓存、缓存插件和 CDN 缓存。