类别和标签页上的模式面包屑

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 );

剩下的就简单了,你也可以做到