Sometimes it's needed to add your own Merge Tag to an already defined Trigger. In example you can add a custom meta Merge Tag to default Post Published Trigger.
To do this simply hook into the action and add your Merge Tag:
use BracketSpace\Notification\Repository\MergeTag;
use BracketSpace\Notification\Repository\Trigger\Post\PostPublished;
// Hook into an action when Merge Tags are attached to Trigger.
add_action(
'notification/trigger/merge_tags',
function($trigger)
{
// Check if registered Trigger is the one you need.
if (! $trigger instanceof PostPublished::class) {
return;
}
// Pay attention to the Tag type you are defining.
// If you want to output an HTML, use HtmlTag instead.
$trigger->addMergeTag(
new MergeTag\StringTag(
[
'slug' => 'new_merge_tag',
'name' => __('New Merge Tag', 'textdomain'),
'resolver' => function($trigger) {
return get_post_meta($trigger->post->ID, '_my_meta_key', true);
},
]
)
);
}
);
Since v9, dynamic property $trigger->{$post_type} has been replaced with a static prop $trigger->post.
Targeting all Post Type Triggers
You can target all the Post Type Triggers like this:
add_action(
'notification/trigger/merge_tags',
function($trigger)
{
if (! preg_match(
'/post\/(.*)\/(updated|trashed|published|drafted|added|pending|scheduled)/',
$trigger->getSlug()
) {
return;
}
// Add your Tag.
}
);
Global Merge Tags
The Notification plugin also supports global Merge Tags which are added to all Triggers. You can use this nifty function to create one: