-
-
Save jonathanjanssens/225181fad721d6d136af to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Add schema to yoast seo breadcrumb | |
*/ | |
add_filter('wpseo_breadcrumb_links', 'jj_add_crumb_schema', 10, 1); | |
function jj_add_crumb_schema($crumbs) { | |
if ( ! is_array( $crumbs ) || $crumbs === array() ) { | |
return $crumbs; | |
} | |
$listItems = []; | |
$j = 1; | |
foreach ( $crumbs as $i => $crumb ) { | |
$item = []; | |
if ( isset( $crumb['id'] ) ) { | |
$item = [ | |
'@id' => get_permalink($crumb['id']), | |
'name' => strip_tags( get_the_title( $id ) ) | |
]; | |
} | |
if ( isset( $crumb['term'] ) ) { | |
$term = $crumb['term']; | |
$item = [ | |
'@id' => get_term_link( $term ), | |
'name' => $term->name | |
]; | |
} | |
if ( isset( $crumb['ptarchive'] ) ) { | |
$postType = get_post_type_object($crumb['ptarchive']); | |
$item = [ | |
'@id' => get_post_type_archive_link($crumb['ptarchive']), | |
'name' => $postType->label | |
]; | |
} | |
if(isset($crumb['url'])) { | |
if($crumb['text'] !== '') { | |
$title = $crumb['text']; | |
} else { | |
$title = get_bloginfo('name'); | |
} | |
$item = [ | |
'@id' => $crumb['url'], | |
'name' => $title | |
]; | |
} | |
$listItem = [ | |
'@type' => 'ListItem', | |
'position' => $j, | |
'item' => $item | |
]; | |
$listItems[] = $listItem; | |
$j++; | |
} | |
$schema = [ | |
'@context' => 'http://schema.org', | |
'@type' => 'BreadcrumbList', | |
'itemListElement' => $listItems | |
]; | |
$html = '<script type="application/ld+json">' . json_encode($schema) . '</script> '; | |
echo $html; | |
return $crumbs; | |
} |
Thank you, this is exactly what i want, just the BreadcrumbList. I use it together with the filter to disable the default Yoast WebPage Json-LD.
add_filter( 'wpseo_json_ld_output', '__return_false' );
My theme has the WebPage markup already in the page, and it was missing the BreadcrumbList.
Hello, thanks for the code, it works like a charm on front end.
However, it creates an error in the dashboard which prevents assigning a post thumbnail.
Here is the error I get in console log when the code is active on my website:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Then when I try to assign a post thumbnail, it triggers the following error:
uncaught exception: Object
Can you please help
I am not sure what is your problem, and if it is related with the bug I discovered. There is an error in the code at line 25, it is not this:
'name' => strip_tags( get_the_title( $id ) )
but this:
'name' => strip_tags( get_the_title($crumb['id']) )
Of course, the variable $id is not defined and could give an error in front office.
also change echo $html; to print_r($html);
Hello, thanks for the code, it works like a charm on front end.
However, it creates an error in the dashboard which prevents assigning a post thumbnail.
Here is the error I get in console log when the code is active on my website:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Then when I try to assign a post thumbnail, it triggers the following error:
uncaught exception: Object
Can you please help