首先,让我们看一下大致的步骤。
- 以“函数名()”的形式创建一个面包屑函数,并添加到functions.php
- 将创建的函数
<?php 関数名(); ?>
粘贴到任意模板中并显示在表单中
即使说单一的面包屑结构,也可以根据要显示的页面考虑各种模式。暂时尝试总结常用页面的显示示例。
要显示的页面 | 面包屑 |
---|---|
首页 | 不显示 |
类别页面 | HOME(带链接)> 类别名称 |
每月存档页面 | HOME(带链接)> 日期 |
标签页 | HOME(带链接)> 标签名称 |
发帖子页面 | HOME(带链接)> 类别名称(带链接)> 页面标题 |
固定页面 | HOME(含链接)> 页面标题 |
搜索页面 | HOME(带链接)> “关键字”的搜索结果 |
404 页 | HOME(带链接) > 找不到您要查找的页面。 |
显示每个面包屑项的代码
页 | PHP代码 | 表示 |
---|---|---|
主页 | home_url(); | URL |
类别 | the_category(); | 文字链接 |
日期和时间 | the_archive_title(); | 文本 |
标签名 | the_archive_title(); | 文本 |
文章标题 | the_title(); | 文本 |
固定页面标题 | the_title(); | 文本 |
条件分支的代码
以下是显示带有条件分支的面包屑时的 php if 语句
if ( 条件 ) {
// 条件是true的时候,要执行的内容
}
这是要放置在 [ 条件 ]中的代码列表。
页 | 条件标签 |
---|---|
对于首页 | is_front_page() |
对于类别页面 | is_category() |
对于每月存档页面 | is_archive() |
对于标签页 | is_archive() |
对于帖子页面 | is_single() |
对于固定页面 | is_page() |
对于搜索页面 | is_search() |
对于 404 页 | is_404() |
从上表可以看出,“对于每月存档页面”和“对于标签页”的条件分支是一样的,所以我们一起创建面包屑代码。
区切り文字の設定
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">类别名称</a></li>
<li>帖子的名称</li>
<ul>
<!-----------CSS--------------->
<style>
ul{
list-style: none;
font-size: .8em;
}
li{
display: inline;
}
li a{
color: inherit;
text-decoration: none;
}
li + li:before{
content: ">";
margin-right:.3em;
}
</style>
换句话说,这个面包屑列表是用 li 标签创建的。
骨架PHP代码
根据以上信息,我尝试创建一个作为框架的源代码。这里,显示面包屑列表的函数的名称是“breadcrumb”。
function breadcrumb() {
$home = '<li><a href="'.get_bloginfo('url').'" >HOME</a></li>';
echo '<ul>';
if ( is_front_page() ) {
// 对于首页
}
else if ( is_category() ) {
// 对于类别页面
}
else if ( is_archive() ) {
// 对于每月存档页面
}
else if ( is_single() ) {
// 对于帖子页面
}
else if( is_page() ) {
// 对于静态页面
}
else if( is_search() ) {
// 对于搜索页面
}
else if( is_404() ) {
//对于 404 页
}
echo "</ul>";
}
面包屑列表最左边显示的文本链接“HOME”是常用的显示方式,所以我把它做成一个变量。
在php中定义变量时,
$変数名 = '値';
它将采用以下形式
这次,我使用变量名“home”,如下所示。
$home = '<li><a href="'.get_bloginfo('url').'" >HOME</a></li>';
这echo $home;
将显示文本链接“HOME”。
让我们逐步了解如何创建面包屑列表。
首页
首先是首页。由于面包屑未显示在首页上,因此条件分支中未写入任何内容。
if ( is_front_page() ) {
// 未写入任何内容
}
类别页面
要在类别页面上显示面包屑,您需要考虑以下两种模式。
- 如果没有父类
Home > Category - 如果有父类
首页 > 父类 > 子类
如果没有父类别,则只the_archive_title()
输出显示的类别名称。但它也可能有父类别,因此我们也需要获取该信息。这是在那里使用的功能get_queried_object()
。
get_queried_object()
get_queried_object()
是一个函数,可以获取当前显示页面的信息。如果您正在查看类别存档,您可以获得有关该类别的信息,因此使用它来获取有关父类别的信息。
详细解说一下:
$cat = get_queried_object();
获取当前显示的类别存档的对象,然后
$cat_id = $cat->parent;
获取父类别的类别 ID。
get_category()
get_category()
是一个允许您通过将类别 ID 放在括号中来获取有关类别的信息的函数。
get_category_link()
该函数get_category_link(カテゴリID)
用于获取表单中指定的分类ID的URL
array_unshift()
array_unshift()
是一个将元素(此处为列表标记)放在数组开头的函数。在这里,列表是按照“子类别”到“父类别”的顺序创建的,所以如果你保持原样,面包屑的顺序就会颠倒过来。所以我们使用这个函数来预先添加稍后创建的父类别列表。
foreach 语句
当你想扩展数组中的值时使用 foreach 语句(这里是类别列表标签)。
foreach(变量 as $value){
echo $value;
}
像这样使用时,打印数组的值。
这是使用上述函数创建的代码。。
else if ( is_category() ) {
$cat = get_queried_object();
$cat_id = $cat->parent;
$cat_list = array();
while ($cat_id != 0){
$cat = get_category( $cat_id );
$cat_link = get_category_link( $cat_id );
array_unshift( $cat_list, '<li><a href="'.$cat_link.'">'.$cat->name.'</a></li>' );
$cat_id = $cat->parent;
}
echo $home;
foreach($cat_list as $value){
echo $value;
}
the_archive_title('<li>', '</li>');
}
每月归档标签页
每月归档页面和标记页面一起处理。
else if ( is_archive() ) {
echo $home;
the_archive_title('<li>', '</li>');
}
这样列表标签就会显示每月归档标签页的标题。
发布页面
投稿ページで表示させたいのは、
HOME > 类别名称 > 页面标题
这是一个面包屑列表。
但是,如果注册类别有父类别,
HOME > 父类别名称 > 子类别名称 > 页面标题
我想以以上形式显示面包屑列表, 那么我们就使用get_the_category()
。
get_the_category()
get_the_category()
是获取显示的文章注册的分类信息的函数。使用此函数,您可以访问一个数组,其中按[0]、[1]、[2]、...的顺序存储了文章中注册的类别。使用它来获取注册文章的类别ID。
在那之后,
- 从类别 ID 获取 URL
- 获取类别名称
- 使其成为列表标签并将其添加到数组中
- 从类别 ID 获取父类别
- 输出数组作为列表标签
按照以上步骤来,创建面包屑列表。
作为具体流程,首先
$cat = get_the_category();
将变量$cat赋值于get_the_category()
。
之后,将第一个注册的类别(即[0])的类别ID赋值给变量并获取。
$cat_id = $cat[0]->cat_ID;
isset()
isset 函数isset(変数)
用于检查变量是否具有值。
if( isset(变量) ){
TRUE;
} else{
FALSE;
}
与上面的 if 语句一起使用。在这里,我们首先使用 isset 函数来检查文章是否注册了类别。
一下的代码是使用上述函数创建的。
else if ( is_single() ) {
$cat = get_the_category();
if( isset($cat[0]->cat_ID) ) $cat_id = $cat[0]->cat_ID;
$cat_list = array();
while ($cat_id != 0){
$cat = get_category( $cat_id );
$cat_link = get_category_link( $cat_id );
array_unshift( $cat_list, '<li><a href="'.$cat_link.'">'.$cat->name.'</a></li>' );
$cat_id = $cat->parent;
}
foreach($cat_list as $value){
echo $value;
}
the_title('<li>', '</li>');
}
固定页面
固定页面很容易,因为它只是“HOME > 页面标题”。
else if( is_page() ) {
echo $home;
the_title('<li>', '</li>');
}
搜索页面
get_search_query()
用于显示搜索关键字。「キーワード」の検索結果
要显示它,请执行以下操作:
else if( is_search() ) {
echo $home;
echo '<li>「'.get_search_query().'」的检索结果</li>';
}
第 404 页
404 页面很简单,因为它只显示任意文本。
else if( is_404() ) {
echo $home;
echo '<li>没有所查询的内容</li>';
}
删除档案中的冗余标题
最后,在创建面包屑时删除存档名称前出现的无关标题,例如“Category:”、“Tag:”、“Monthly:”等。将下面的代码与面包屑一起添加到您的 functions.php。
add_filter( 'get_the_archive_title', function ($title) {
if ( is_category() ) {
$title = single_cat_title( '', false );
} elseif ( is_tag() ) {
$title = single_tag_title( '', false );
} elseif ( is_month() ) {
$title = single_month_title( '', false );
}
return $title;
});
如何制作自己的面包屑的总结
下面是完成的代码。
// 面包屑
function breadcrumb() {
$home = '<li><a href="'.get_bloginfo('url').'" >HOME</a></li>';
echo '<ul>';
if ( is_front_page() ) {
// 对于首页
}
else if ( is_category() ) {
// 对于类别页面
$cat = get_queried_object();
$cat_id = $cat->parent;
$cat_list = array();
while ($cat_id != 0){
$cat = get_category( $cat_id );
$cat_link = get_category_link( $cat_id );
array_unshift( $cat_list, '<li><a href="'.$cat_link.'">'.$cat->name.'</a></li>' );
$cat_id = $cat->parent;
}
echo $home;
foreach($cat_list as $value){
echo $value;
}
the_archive_title('<li>', '</li>');
}
else if ( is_archive() ) {
//对于标签页
echo $home;
the_archive_title('<li>', '</li>');
}
else if ( is_single() ) {
// 对于帖子页面
$cat = get_the_category();
if( isset($cat[0]->cat_ID) ) $cat_id = $cat[0]->cat_ID;
$cat_list = array();
while ($cat_id != 0){
$cat = get_category( $cat_id );
$cat_link = get_category_link( $cat_id );
array_unshift( $cat_list, '<li><a href="'.$cat_link.'">'.$cat->name.'</a></li>' );
$cat_id = $cat->parent;
}
foreach($cat_list as $value){
echo $value;
}
the_title('<li>', '</li>');
}
else if( is_page() ) {
// 对于静态页面
echo $home;
the_title('<li>', '</li>');
}
else if( is_search() ) {
// 对于搜索页面
echo $home;
echo '<li>「'.get_search_query().'」的搜索结果</li>';
}
else if( is_404() ) {
// 对于 404 页
echo $home;
echo '<li>没有查询的内容</li>';
}
echo "</ul>";
}
// 删除档案中的冗余标题
add_filter( 'get_the_archive_title', function ($title) {
if ( is_category() ) {
$title = single_cat_title( '', false );
} elseif ( is_tag() ) {
$title = single_tag_title( '', false );
} elseif ( is_month() ) {
$title = single_month_title( '', false );
}
return $title;
});
将此代码添加到主题函数 (functions.php) 后,在您希望面包屑出现的位置插入以下代码。
<?php breadcrumb(); ?>