# Hooks
Hooks allow the modification of a Structs body or attributes.
# Adding hooks to Structs
use romanzipp\Seo\Helpers\Hook;
$hook = Hook::make()
->onBody()
->callback(function ($body) {
return $body;
});
Method 1: Call the SeoService::hook()
method to apply a given $hook
to a Struct class.
use romanzipp\Seo\Structs\Title;
seo()->hook(Title::class, $hook);
Method 2: Apply the $hook
directly to the Struct.
use romanzipp\Seo\Structs\Title;
Title::hook($hook);
Both methods are basically the same, choose which one you prefer.
# Examples
For example, you want to append a site name to the body of every <title>
tag:
# Modify the body
of all Title
Structs.
use romanzipp\Seo\Helpers\Hook;
use romanzipp\Seo\Structs\Title;
Title::hook(
Hook::make()
->onBody()
->callback(function ($body) {
return ($body ? $body . ' | ' : '') . 'Site-Name';
})
);
use romanzipp\Seo\Structs\Title;
seo()->add(Title::make()->body('Home')); // <title>Home | Site-Name</title>
seo()->add(Title::make()->body(null)); // <title>Site-Name</title>
# Modify any attribute of the OpenGraph
Struct which has the attribute property
with value og:site_name
use romanzipp\Seo\Helpers\Hook;
use romanzipp\Seo\Structs\Meta\OpenGraph;
OpenGraph::hook(
Hook::make()
->whereAttribute('property', 'og:site_name')
->onAttributes()
->callback(function ($attributes) {
$attributes['new'] = 'This will be added to all meta tags with property="og:site_name"';
return $attributes;
})
);
# Modify the content
attribute of the OpenGraph
Struct which has the attribute property
with value og:title
use romanzipp\Seo\Helpers\Hook;
use romanzipp\Seo\Structs\Meta\OpenGraph;
OpenGraph::hook(
Hook::make()
->whereAttribute('property', 'og:title')
->onAttribute('content')
->callback(function ($content) {
return ($content ? $content . ' | ' : '') . 'Site-Name';
})
);
use romanzipp\Seo\Structs\Meta\OpenGraph;
$seo->add(OpenGraph::make()->property('title')->content('Home')); // <meta ... content="Home | Site-Name" />
$seo->add(OpenGraph::make()->property('title')->content(null)); // <meta ... content="Site-Name" />
# Reference
# Hook Instance
use romanzipp\Seo\Helpers\Hook;
$hook = Hook::make();
$hook = new Hook;
# Hook Targets
# Target Struct Body
You will receive $body
parameter of type null|string
in the callback function
$hook
->onBody()
->callback(function ($body) {
return $body;
});
# Target any Struct Attribute
You will receive $attributes
parameter of type array
in the callback function
$hook
->onAttributes('content')
->callback(function ($attributes) {
return $attributes;
});
# Target a specific Struct Attribute
You will receive $attribute
parameter of type null|string
in the callback function
$hook
->onAttribute('content')
->callback(function ($attribute) {
return $attribute;
});
# Hook Filters
Filter Structs by $attribute
with value $value
$hook->whereAttribute($attribute, $value);
← Structs Laravel-Mix →