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:

HTML
<a href="tel:+41344020000000">034 402 000 00 00</a>
PHP
<?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;
}