Block Editor Template Tags
Ursprungs-Code von tdryson. Den Code habe ich an meine Anforderungen angepasst.
Die Template Tags können mittels {{$prefixes.fieldname}} hinzugefügt werden.
Wenn du z.B eine Optionsseite hast und dort drin auf erster Ebene ein ACF Field. Dann kannst du den Code {{acfoption.FELDERSTEEBENE}} verwenden.
Wenn du eine Optionsseite hast und von dort ein Feld aus einer zweiten Ebene anzeigen lassen möchtest, geht das so: {{acfoption.FELDERSTEEBENE_FELDZWEITEEBENE}}.
Also bspw. {{acfoption.business_mail}} oder {{acffield.subheading}}
Anpassungen in meinem Code
- Funktion-Prefixe in gw_ geändert
- $prefixes Namen angepasst
Dann habe ich es so programmiert, dass wenn ein Shortcode als Link verwendet wird, dass es im Link alle Leerzeichen rauslöscht. Wenn ich nun also eine Telefonnummer wie 034 402 000 00 00 angebe, erscheint das so:
<a href="tel:+41344020000000">034 402 000 00 00</a>
<?php
add_filter("render_block", "gw_template_tags", 10, 2);
function gw_template_tags($block_content, $block)
{
$prefixes = [
"fn",
"queryparam",
"acfoption",
"acffield",
"userinfo",
"usermeta",
"author",
"hook",
];
$pattern = "/{{(" . implode("|", $prefixes) . ")\.([\w-]+)}}/";
// First, handle the href="" case separately
$block_content = preg_replace_callback(
'/href="([^"]*{{(?:' . implode("|", $prefixes) . ')\.[^"]+}}[^"]*)"/',
function ($matches) use ($pattern) {
// Process the href part, removing spaces from the matched dynamic content
$href_content = preg_replace_callback(
$pattern,
function ($href_matches) {
$dynamic_tag = trim($href_matches[2]);
$value = "";
switch ($href_matches[1]) {
case "fn":
if (!function_exists($dynamic_tag)) {
return;
}
$value = call_user_func($dynamic_tag);
break;
case "queryparam": // Query param
$value = isset($_GET[$dynamic_tag])
? sanitize_text_field($_GET[$dynamic_tag])
: "";
break;
case "acfoption": // ACF options page
if (function_exists("get_field")) {
$value = get_field($dynamic_tag, "options");
}
break;
case "acffield": // ACF field
if (function_exists("get_field")) {
$value = get_field($dynamic_tag);
}
break;
case "userinfo": // Current user info
$current_user = wp_get_current_user();
$value = $current_user->$dynamic_tag;
break;
case "usermeta": // User meta
$user_id = get_current_user_id();
$value = get_user_meta(
$user_id,
$dynamic_tag,
true
);
break;
case "author": // Author meta
$value = get_the_author_meta($dynamic_tag);
break;
case "hook": // Action hook
ob_start();
do_action($dynamic_tag);
$value = ob_get_clean();
break;
}
// Remove spaces for href attribute content
return str_replace(" ", "", $value);
},
$matches[1]
);
return 'href="' . $href_content . '"';
},
$block_content
);
// Then handle other content (outside href) as usual
$block_content = preg_replace_callback(
$pattern,
function ($matches) {
$dynamic_tag = trim($matches[2]);
$value = "";
switch ($matches[1]) {
case "fn":
if (!function_exists($dynamic_tag)) {
return;
}
$value = call_user_func($dynamic_tag);
break;
case "queryparam": // Query param
$value = isset($_GET[$dynamic_tag])
? sanitize_text_field($_GET[$dynamic_tag])
: "";
break;
case "acfoption": // ACF options page
if (function_exists("get_field")) {
$value = get_field($dynamic_tag, "options");
}
break;
case "acffield": // ACF field
if (function_exists("get_field")) {
$value = get_field($dynamic_tag);
}
break;
case "userinfo": // Current user info
$current_user = wp_get_current_user();
$value = $current_user->$dynamic_tag;
break;
case "usermeta": // User meta
$user_id = get_current_user_id();
$value = get_user_meta($user_id, $dynamic_tag, true);
break;
case "author": // Author meta
$value = get_the_author_meta($dynamic_tag);
break;
case "hook": // Action hook
ob_start();
do_action($dynamic_tag);
$value = ob_get_clean();
break;
}
// Return the original value (with spaces intact for non-href cases)
return $value;
},
$block_content
);
return $block_content;
}