Breadcrumb Schema Builder
Builds breadcrumb JSON-LD from route hierarchy.
Function signature
ogBuildBreadcrumbSchemaData(breadcrumbs = array(), options = array())
Categories
- Database Integrity
Parameters
breadcrumbsOrdered breadcrumb rows with names and URLs.optionsOptional documented policy controls for the helper.Return value
Public-safe status string returned by the function for controller branching or logging.
- success
- message
- data
Compatibility
Existing function name, slug, path, and call order preserved; advertised metadata corrected to the actual source behavior.
Minimum PHP version: 7.4
Security notes
Use caller-owned allowlists and context-specific escaping; validate file paths, routes, email tokens, cart totals, discount rules, and tax-region rules before production use.
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Builds breadcrumb JSON-LD from route hierarchy.
*
* Primary use case: SEO breadcrumbs.
* Typical inputs: breadcrumb labels and URLs.
* Typical output: schema array.
*
* Implementation note: Keep visible breadcrumbs and schema consistent.
*
* @return array Structured result data with success, message, and data keys.
*/
function ogBuildBreadcrumbSchemaData($breadcrumbs = array(), $options = array()) {
$result = array(
'success' => false,
'message' => '',
'data' => array()
);
if (!is_array($breadcrumbs)) {
$result['message'] = 'Breadcrumbs must be supplied as an array.';
return $result;
}
if (!is_array($options)) {
$options = array();
}
$items = array();
$position = 1;
foreach ($breadcrumbs as $breadcrumb) {
if (!is_array($breadcrumb)) {
continue;
}
$name = '';
if (!empty($breadcrumb['name'])) {
$name = trim(strip_tags((string)$breadcrumb['name']));
}
$url = '';
if (!empty($breadcrumb['url'])) {
$url = trim((string)$breadcrumb['url']);
}
if (empty($name) || empty($url)) {
continue;
}
if (!preg_match('/^(\/\/|https:\/\/)/i', $url)) {
continue;
}
$items[] = array(
'@type' => 'ListItem',
'position' => $position,
'name' => $name,
'item' => $url
);
$position++;
}
if (empty($items)) {
$result['message'] = 'No valid breadcrumb entries were supplied.';
return $result;
}
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'BreadcrumbList',
'itemListElement' => $items
);
$result['success'] = true;
$result['message'] = 'Breadcrumb schema data built.';
$result['data'] = array('schema' => $schema);
return $result;
}