在 WordPress 开发中很多场景需要动态调整内容的显示。例如首页和内页需要显示不同的链接分类,以此来控制和优化内外链接,而这些分类通常存储在 WordPress 的「链接」管理中。
wp_list_bookmarks 是一个经典的函数,可以方便地输出链接列表。
但在一些定制需求中,例如去掉默认的 li 标签或者动态切换分类,默认的实现可能不够灵活。
下面我详细介绍一下如何实现首页显示 home 分类下的所有链接,而在内页显示 internal 分类的所有链接,所以使用时记得先创建对应的分类或者通过修改代码中的对应分类别名。
同时会处理一些常见问题,例如分类不存在的兼容性以及如何自定义输出格式。
/* * WordPress 实现首页与内页显示不同的友情链接 * https://zhangzifan.com/wordpress-links.html */wp_list_bookmarks([ // 'category' 参数:指定要显示的链接分类 ID,根据首页或内页动态切换 'category' => is_home() ? (term_exists('home', 'link_category') // 检查分类 'home' 是否存在 ? get_term_by('slug', 'home', 'link_category')->term_id // 获取 'home' 分类的 ID : '') // 如果分类不存在,则设置为空字符串 : (term_exists('internal', 'link_category') // 检查分类 'internal' 是否存在 ? get_term_by('slug', 'internal', 'link_category')->term_id // 获取 'internal' 分类的 ID : ''), // 如果分类不存在,则设置为空字符串 'orderby' => 'id',// 设置链接排序方式,这里按链接的 ID 排序 'categorize' => 0,// 是否按分类分组显示链接,0 表示不分组 'title_li' => '',// 是否显示标题,空字符串表示不显示标题 'before' => '',// 每个链接之前的 HTML,这里设置为空,去掉默认的 li 包裹 'after' => '',// 每个链接之后的 HTML,这里设置为空,去掉默认的 li 包裹]);
在这个功能中,我们需要实现以下几点:
首页与内页显示不同的链接分类:首页链接归类为 home 分类,内页归类为 internal 分类。
兼容分类不存在的情况:如果某分类不存在,不应输出错误,而是忽略该分类。
去掉默认的 li 包裹:WordPress 的 wp_list_bookmarks 默认会用 li 包裹每个链接。我们需要去掉这些标签,以便更灵活地控制前端布局。
如果需要更复杂的输出格式,比如带自定义样式或结构,可以考虑改用 get_bookmarks() 获取数据,然后通过循环生成 HTML。
例如:
/* * WordPress 实现首页与内页显示不同的友情链接 * https://zhangzifan.com/wordpress-links.html */$links = get_bookmarks([ 'category' => is_home() ? (term_exists('home', 'link_category') ? get_term_by('slug', 'home', 'link_category')->term_id : '') : (term_exists('internal', 'link_category') ? get_term_by('slug', 'internal', 'link_category')->term_id : ''), 'orderby' => 'id',]); if (!empty($links)) { foreach ($links as $link) { echo "<div class='custom-link'><a href='{$link->link_url}' target='_blank'>{$link->link_name}</a></div>"; }}
通过 wp_list_bookmarks 的参数设置和 is_home() 条件判断,我们实现了首页与内页的动态分类切换。
结合 before 和 after 参数,成功去除了默认的 li 包裹,为前端提供了更简洁的输出格式。
如果需要更高的定制性,可以使用 get_bookmarks() 手动构建 HTML 输出。
发表评论