类别和标签页上的模式面包屑
Schema breadcrumbs on category and tag pages
我正在尝试在没有插件的情况下在 wordpress 中在类别和标签页上实现面包屑方案。
我把我使用的面包屑导航变成了模式,它可以工作,但唯一的问题是我不能在模式中设置位置值。
举个例子,子类别出现问题。
这是我使用的代码;
function schema_breadcrumbs() {
$text['home'] = 'Home';
$text['category'] = '"name": "%1$s"';
$text['url'] = '"@id": "%s",';
$text['tag'] = '"name": "%1$s"';
$wrap_before = '<script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList","itemListElement": [';
$wrap_after = '] } </script>';
$before = '{ "@type": "ListItem","position": 2,';
$after = '}';
$show_home_link = 1;
$show_current = 1;
global $post;
$home_url = home_url('/');
$link = '{ "@type": "ListItem",';
$link .= '"position": 1, "item": { "@id": "%1$s", "name": "%2$s" }';
$link .= '},';
$parent_id = ( $post ) ? $post->post_parent : '';
$home_link = sprintf( $link, $home_url, $text['home'], 1 );
$position = 0;
echo $wrap_before;
if ( $show_home_link ) {$position += 1; echo $home_link;}
if ( is_category() ) {
$parents = get_ancestors( get_query_var('cat'), 'category' );
foreach ( array_reverse( $parents ) as $cat ) {
$position += 1;
echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position ); }
if ( $show_current ) {
echo $before . sprintf( $text['url'], get_category_link( get_queried_object() ) ), sprintf( $text['category'], single_cat_title( '', false ) ) . $after;} }
elseif ( is_tag() ) {
if ( $show_current )
echo $before . sprintf( $text['url'], get_category_link( get_queried_object() ) ), sprintf( $text['tag'], single_tag_title( '', false ) ) . $after; }
echo $wrap_after;
}
输出是这样的
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"item": {
"@id": "http://www.example.com/",
"name": "Home"
}
}, {
"@type": "ListItem",
"position": 1,
"item": {
"@id": "http://www.example.com/category/",
"name": "Category"
}
}, {
"@type": "ListItem",
"position": 2,
"@id": "http://www.example.com/category/sub-category/",
"name": "Sub Category"
}]
}
在$link
中,您可以将1
替换为%3$d
。
您需要修改字符串构造以将 $position
附加到静态部分。
您需要像其他位置输出一样更改回显行,其中 $before
曾经是 sprintf()
样式。将 2
替换为 %d
,然后输出如下:
echo sprintf( $before, $position );
剩下的就简单了,你也可以做到
我正在尝试在没有插件的情况下在 wordpress 中在类别和标签页上实现面包屑方案。
我把我使用的面包屑导航变成了模式,它可以工作,但唯一的问题是我不能在模式中设置位置值。
举个例子,子类别出现问题。
这是我使用的代码;
function schema_breadcrumbs() {
$text['home'] = 'Home';
$text['category'] = '"name": "%1$s"';
$text['url'] = '"@id": "%s",';
$text['tag'] = '"name": "%1$s"';
$wrap_before = '<script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList","itemListElement": [';
$wrap_after = '] } </script>';
$before = '{ "@type": "ListItem","position": 2,';
$after = '}';
$show_home_link = 1;
$show_current = 1;
global $post;
$home_url = home_url('/');
$link = '{ "@type": "ListItem",';
$link .= '"position": 1, "item": { "@id": "%1$s", "name": "%2$s" }';
$link .= '},';
$parent_id = ( $post ) ? $post->post_parent : '';
$home_link = sprintf( $link, $home_url, $text['home'], 1 );
$position = 0;
echo $wrap_before;
if ( $show_home_link ) {$position += 1; echo $home_link;}
if ( is_category() ) {
$parents = get_ancestors( get_query_var('cat'), 'category' );
foreach ( array_reverse( $parents ) as $cat ) {
$position += 1;
echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position ); }
if ( $show_current ) {
echo $before . sprintf( $text['url'], get_category_link( get_queried_object() ) ), sprintf( $text['category'], single_cat_title( '', false ) ) . $after;} }
elseif ( is_tag() ) {
if ( $show_current )
echo $before . sprintf( $text['url'], get_category_link( get_queried_object() ) ), sprintf( $text['tag'], single_tag_title( '', false ) ) . $after; }
echo $wrap_after;
}
输出是这样的
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"item": {
"@id": "http://www.example.com/",
"name": "Home"
}
}, {
"@type": "ListItem",
"position": 1,
"item": {
"@id": "http://www.example.com/category/",
"name": "Category"
}
}, {
"@type": "ListItem",
"position": 2,
"@id": "http://www.example.com/category/sub-category/",
"name": "Sub Category"
}]
}
在$link
中,您可以将1
替换为%3$d
。
您需要修改字符串构造以将 $position
附加到静态部分。
您需要像其他位置输出一样更改回显行,其中 $before
曾经是 sprintf()
样式。将 2
替换为 %d
,然后输出如下:
echo sprintf( $before, $position );
剩下的就简单了,你也可以做到