Snad na každém webu klientů řeším kontaktní údaje. Většinou je to e-mail a telefon, jenže je překvapivě na mnoha místech – hlavička, patička, kontakt, různě po webu… A pokud si klient změní e-mail (to se moc nestává) nebo telefon (to už ano), hledat to všude po webu a měnit a noční můra. A čím větší je web, tím větší je pravděpodobnost, že nějaké místo zapomenete.
Nešlo mi to jinak? No jasně, šlo.
Globální nastavení v adminu
Do administrace si můžete přidat globální pole, např. telefon a e-mail. Já tam mám ještě odkazy (mailto a tel), abych měla všude jednotný formát (protože třeba tel. číslo chcete bez mezer, ale ukázat ho chcete s mezerami).
A díky kousku kódu níže si můžete tyhle dvě (reps. čtyři) hodnoty přidat do administrace v menu. A pak je jednoduše vkládat do webu, třeba shortocodem:
[gn_telefon], reps.[gn_telefon_link][gn_email], reps.[gn_email_link]
// === Global settings - phone and email ==
add_action('admin_menu', function () {
add_menu_page(
'Globální nastavení',
'Globální nastavení',
'manage_options',
'globalni-nastaveni',
'gn_render_settings_page',
'dashicons-admin-generic',
2
);
});
add_action('admin_init', function () {
register_setting('gn_settings_group', 'gn_telefon');
register_setting('gn_settings_group', 'gn_telefon_link');
register_setting('gn_settings_group', 'gn_email');
register_setting('gn_settings_group', 'gn_email_link');
});
// 3) admin page with form
function gn_render_settings_page() {
?>
<div class="wrap">
<h1>Globální nastavení</h1>
<form method="post" action="options.php">
<?php settings_fields('gn_settings_group'); ?>
<table class="form-table">
<tr>
<th><label for="gn_telefon">Telefon</label></th>
<td><input type="text" id="gn_telefon" name="gn_telefon"
value="<?php echo esc_attr(get_option('gn_telefon')); ?>" class="regular-text"></td>
</tr>
<tr>
<th><label for="gn_telefon_link">Telefon (link)</label></th>
<td><input type="text" id="gn_telefon_link" name="gn_telefon_link"
value="<?php echo esc_attr(get_option('gn_telefon_link')); ?>" class="regular-text"></td>
</tr>
<tr>
<th><label for="gn_email">Email</label></th>
<td><input type="email" id="gn_email" name="gn_email"
value="<?php echo esc_attr(get_option('gn_email')); ?>" class="regular-text"></td>
</tr>
<tr>
<th><label for="gn_email_link">Email (link)</label></th>
<td><input type="text" id="gn_email_link" name="gn_email_link"
value="<?php echo esc_attr(get_option('gn_email_link')); ?>" class="regular-text"></td>
</tr>
</table>
<?php submit_button('Uložit'); ?>
</form>
</div>
<?php
}
// 4) shortcodes
add_shortcode('gn_telefon', function () {
return esc_html(get_option('gn_telefon'));
});
add_shortcode('gn_telefon_link', function () {
return esc_html(get_option('gn_telefon_link'));
});
add_shortcode('gn_email', function () {
return esc_html(get_option('gn_email'));
});
add_shortcode('gn_email_link', function () {
return esc_html(get_option('gn_email_link'));
});
Bricks – registrace jako proměnné
Pokud chcete ještě tyto proměnné zobrazit jako proměnné ve výběru dynamických dat v Bricks, přidejte ještě tento kousek.
// Bricks dynamic tags
add_filter('bricks/dynamic_tags_list', function ($tags) {
$tags[] = [
'name' => '{gn_telefon}',
'label' => 'Telefon (globální)',
'group' => 'Globální nastavení',
];
$tags[] = [
'name' => '{gn_telefon_link}',
'label' => 'Telefon link (globální)',
'group' => 'Globální nastavení',
];
$tags[] = [
'name' => '{gn_email}',
'label' => 'Email (globální)',
'group' => 'Globální nastavení',
];
$tags[] = [
'name' => '{gn_email_link}',
'label' => 'Email link (globální)',
'group' => 'Globální nastavení',
];
return $tags;
});
add_filter('bricks/dynamic_data/render_tag', function ($tag, $post, $context) {
if ($tag === '{gn_telefon}') return get_option('gn_telefon');
if ($tag === '{gn_telefon_link}') return get_option('gn_telefon_link');
if ($tag === '{gn_email}') return get_option('gn_email');
if ($tag === '{gn_email_link}') return get_option('gn_email_link');
return $tag;
}, 10, 3);
add_filter('bricks/dynamic_data/render_content', function ($content, $post, $context) {
$content = str_replace('{gn_telefon}', get_option('gn_telefon'), $content);
$content = str_replace('{gn_telefon_link}', get_option('gn_telefon_link'), $content);
$content = str_replace('{gn_email}', get_option('gn_email'), $content);
$content = str_replace('{gn_email_link}', get_option('gn_email_link'), $content);
return $content;
}, 10, 3);

