PHP code example of fabianmichael / kirby-meta
1. Go to this page and download the library: Download fabianmichael/kirby-meta library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
fabianmichael / kirby-meta example snippets
<!doctype html>
<html>
<head>
snippet('meta')
class ArticlePage extends Page {
public function metaDefaults(?string $lang = null): array {
return [
'meta_title' => null,
'meta_canonical_url' => null,
'meta_description' => null,
'sitemap_priority' => null,
'sitemap_changefreq' => null,
'robots_index' => null,
'robots_follow' => null,
'robots_archive' => null,
'robots_imageindex' => null,
'robots_snippet' => null,
'robots_translate' => null,
'og_title' => null,
'og_description' => null,
'og_image' => null,
'@graph' => [],
'@social' => [],
'lastmod' => null, // unix timestamp expected
];
},
}
class LegalPage extends Page {
public function metaOverrides(?string $lang = null): array
{
return [
'robots_index' => false, // this will disble the robots index setting in the panel and always exclude this page from being indexed.
];
}
}
return [
'meta.jsonld:after' => function (
array $json,
FabianMichael\Meta\PageMeta $meta,
Kirby\Cms\Page $page
) {
// add breadcrumb to JSON-LD graph
$items = [];
$parents = $page->parents();
if ($parents->count() === 0) {
return $json;
}
$i = 0;
foreach ($parents->flip() as $parent) {
$items[] = [
'@type' => 'ListItem',
'position' => ++$i,
'item' => [
'@id' => $parent->url(),
'name' => $parent->title()->toString(),
],
];
}
$json['@graph'][] = [
'@type' => 'BreadcrumbList',
'itemListElement' => $items,
];
return $json;
},
];
return [
'meta.social:after' => function (
array $social,
FabianMichael\Meta\PageMeta $meta,
Kirby\Cms\Page $page
) {
// add first video file of page to OpenGraph markup
if ($page->hasVideos()) {
$social[] = [
'property' => 'og:video',
'content' => $page->videos()->first()->url(),
];
}
return $social;
},
];
return [
'hooks' => [
'meta.sitemap:before' => function (
Kirby $kirby,
DOMDocument $doc,
DOMElement $root
) {
// add namespace for image sitemap
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:image', 'http://www.google.com/schemas/sitemap-image/1.1');
},
'meta.sitemap.url' => function (
Kirby $kirby,
Page $page,
PageMeta $meta,
DOMDocument $doc,
DOMElement $url) {
if ($page->images()->count() === 0) {
// dynamically exclude page from the sitemap
return false;
}
foreach ($page->images() as $image) {
// add all images from page to image sitemap.
$imageEl = $doc->createElement('image:image');
$imageEl->appendChild($doc->createElement('image:loc', $image->url()));
if ($image->alt()->isNotEmpty()) {
$imageEl->appendChild($doc->createElement('image:caption', $image->alt()));
}
$url->appendChild($imageEl);
}
},
'meta.sitemap:after' => function (
Kirby $kirby,
DOMDocument $doc,
DOMElement $root
) {
foreach ($root->getElementsByTagName('url') as $url) {
if ($lastmod = $url->getElementsByTagName('lastmod')[0] ?? null) {
// remove lastmod date from sitemap entries for some reason …
$url->removeChild($lastmod);
}
}
},
'meta.theme.color' => function (
?string $color
) {
return '#ff0000';
}
],
];