要在WordPress中实现面包屑导航(Breadcrumbs)而不使用插件,您可以通过编写自定义功能来完成。面包屑导航通常用于显示当前页面的层次结构,使用户能够轻松导航到其他页面。以下是一种非插件方式来实现面包屑导航的方法:
打开您的主题文件夹,通常在wpcontent/themes/yourthemename/
。
在主题文件夹中创建一个新的PHP文件,例如breadcrumbs.php
。
在breadcrumbs.php
文件中添加以下代码作为面包屑导航的模板:
<?php
function custom_breadcrumbs() {
$delimiter = ' » '; // 分隔符
$home = '首页'; // 首页文本
$before = '<span class="current">'; // 当前页之前的HTML
$after = '</span>'; // 当前页之后的HTML
if (!is_home() && !is_front_page() || is_paged()) {
echo '<div class="breadcrumbs">';
global $post;
$homeLink = get_bloginfo('url');
echo '<a href="' . $homeLink . '">' . $home . '</a> ' . $delimiter . ' ';
if (is_category()) {
global $wp_query;
$cat_obj = $wp_query>get_queried_object();
$thisCat = $cat_obj>term_id;
$thisCat = get_category($thisCat);
$parentCat = get_category($thisCat>parent);
if ($thisCat>parent != 0)
echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' '));
echo $before . '分类归档 "' . single_cat_title('', false) . '"' . $after;
} elseif (is_day()) {
echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
echo '<a href="' . get_month_link(get_the_time('Y'),get_the_time('m')) . '">' . get_the_time('F') . '</a> ' . $delimiter . ' ';
echo $before . get_the_time('d') . $after;
} elseif (is_month()) {
echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
echo $before . get_the_time('F') . $after;
} elseif (is_year()) {
echo $before . get_the_time('Y') . $after;
} elseif (is_single() && !is_attachment()) {
if (get_post_type() != 'post') {
$post_type = get_post_type_object(get_post_type());
$slug = $post_type>rewrite;
echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type>labels>singular_name . '</a> ' . $delimiter . ' ';
echo $before . get_the_title() . $after;
} else {
$cat = get_the_category(); $cat = $cat[0];
echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
echo $before . get_the_title() . $after;
}
} elseif (!is_single() && !is_page() && get_post_type() != 'post' && !is_404()) {
$post_type = get_post_type_object(get_post_type());
echo $before . $post_type>labels>singular_name . $after;
} elseif (is_attachment()) {
$parent = get_post($post>post_parent);
$cat = get_the_category($parent>ID); $cat = $cat[0];
echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
echo '<a href="' . get_permalink($parent) . '">' . $parent>post_title . '</a> ' . $delimiter . ' ';
echo $before . get_the_title() . $after;
} elseif (is_page() && !$post>post_parent) {
echo $before . get_the_title() . $after;
} elseif (is_page() && $post>post_parent) {
$parent_id = $post>post_parent;
$breadcrumbs = array();
while ($parent_id) {
$page = get_page($parent_id);
$breadcrumbs[] = '<a href="' . get_permalink($page>ID) . '">' . get_the_title($page>ID) . '</a>';
$parent_id = $page>post_parent;
}
$breadcrumbs = array_reverse($breadcrumbs);
foreach ($breadcrumbs as $crumb)
echo $crumb . ' ' . $delimiter . ' ';
echo $before . get_the_title() . $after;
} elseif (is_search()) {
echo $before . '搜索结果为 "' . get_search_query() . '"' . $after;
} elseif (is_tag()) {
echo $before . '标签归档 "' . single_tag_title('', false) . '"' . $after;
} elseif (is_author()) {
global $author;
$userdata = get_userdata($author);
echo $before . '作者档案 ' . $userdata>display_name . $after;
} elseif (is_404()) {
echo $before . '404 错误' . $after;
}
if (get_query_var('paged'))
echo ' (' . __('Page', 'theme') . ' ' . get_query_var('paged') . ')';
echo '</div>';
}
}
single.php
、page.php
等)中包含breadcrumbs.php
文件,以便在需要显示面包屑导航的地方调用custom_breadcrumbs()
函数。通常,您可以在页面标题下方的位置插入面包屑导航。<?php
get_template_part('breadcrumbs');
custom_breadcrumbs();
?>
请注意,上面的代码示例中包含了一些默认设置,您可以根据自己的需求进行自定义。确保在对主题进行更改之前备份主题文件,以防万一出现问题。