55 lines
2.2 KiB
PHP
55 lines
2.2 KiB
PHP
<?php
|
||
if ( ! is_single() ) return;
|
||
|
||
// Рекурсивная функция с Schema.org позицией
|
||
function render_full_category_breadcrumbs( $cat_id, &$position = 1, $separator = ' > ' ) {
|
||
$cat = get_category( $cat_id );
|
||
if ( ! $cat ) return;
|
||
|
||
// Рекурсивно выводим родителей
|
||
if ( $cat->parent != 0 ) {
|
||
render_full_category_breadcrumbs( $cat->parent, $position, $separator );
|
||
}
|
||
|
||
// Выводим категорию с Schema.org структурой
|
||
echo '<li property="itemListElement" typeof="ListItem" itemprop="itemListElement">
|
||
<a property="item" typeof="WebPage" href="' . esc_url( get_category_link( $cat->term_id ) ) . '">
|
||
<span property="name" itemprop="name">' . esc_html( $cat->name ) . '</span>
|
||
</a>
|
||
<meta property="position" content="' . $position . '" />
|
||
</li>';
|
||
|
||
$position++;
|
||
}
|
||
|
||
// Функция проверки принадлежности к рубрике Новости
|
||
function is_news_category( $cat_id ) {
|
||
$news_cat = get_category_by_slug( 'news' );
|
||
if ( ! $news_cat ) return false;
|
||
|
||
// Проверяем, является ли текущая категория "Новости" или её потомком
|
||
return ( $cat_id == $news_cat->term_id || cat_is_ancestor_of( $news_cat->term_id, $cat_id ) );
|
||
}
|
||
|
||
$categories = get_the_category();
|
||
if ( empty( $categories ) ) return;
|
||
|
||
$main_cat = $categories[0];
|
||
$breadcrumb_position = 1;
|
||
$show_datetime = is_news_category( $main_cat->term_id );
|
||
?>
|
||
|
||
<nav class="breadcrumbs" aria-label="Навигация по рубрикам" itemscope itemtype="https://schema.org/BreadcrumbList">
|
||
<ol class="breadcrumbs_list" itemprop="itemListElement">
|
||
<?php render_full_category_breadcrumbs( $main_cat->term_id, $breadcrumb_position ); ?>
|
||
<?php if ( $show_datetime ) : ?>
|
||
<li property="itemListElement" typeof="ListItem">
|
||
<span property="item" typeof="WebPage" itemprop="name"><?php the_time('j F Y, H:i \М\С\К'); ?></span>
|
||
<meta property="position" content="<?php echo ++$breadcrumb_position; ?>" />
|
||
</li>
|
||
<?php endif; ?>
|
||
</ol>
|
||
</nav>
|
||
|
||
|