You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.4 KiB
PHP

<?php
/**
* The Breadcrumbs Class.
*
* @since 1.0.13
* @package RankMath
* @subpackage RankMath\Schema
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\Schema;
use RankMath\Frontend\Breadcrumbs as BreadcrumbTrail;
use RankMath\Paper\Paper;
defined( 'ABSPATH' ) || exit;
/**
* Breadcrumbs class.
*/
class Breadcrumbs implements Snippet {
/**
* Generate breadcrumbs JSON-LD.
*
* @link https://schema.org/BreadcrumbList
*
* @param array $data Array of JSON-LD data.
* @param JsonLD $jsonld JsonLD Instance.
*
* @return array
*/
public function process( $data, $jsonld ) {
$crumbs = BreadcrumbTrail::get() ? BreadcrumbTrail::get()->get_crumbs() : false;
if ( empty( $crumbs ) ) {
return $data;
}
$entity = [
'@type' => 'BreadcrumbList',
'@id' => Paper::get()->get_canonical() . '#breadcrumb',
'itemListElement' => [],
];
$position = 1;
foreach ( $crumbs as $crumb ) {
if ( ! empty( $crumb['hide_in_schema'] ) || empty( $crumb[1] ) ) {
continue;
}
$entity['itemListElement'][] = [
'@type' => 'ListItem',
'position' => $position,
'item' => [
'@id' => $crumb[1],
'name' => $crumb[0],
],
];
$position++;
}
$entity = apply_filters( 'rank_math/snippet/breadcrumb', $entity );
if ( empty( $entity['itemListElement'] ) ) {
return $data;
}
$data['BreadcrumbList'] = $entity;
return $data;
}
}