MB Add dynamic template tags2

Beispiel: {{theme.company_info}} -> (Company Info – von Dashboard > Business Details
Beispiel: {{fn.get_the_title}} -> (Post Titel)

Requirements:

  • Meta Box “Settings Page” Script von snippetclup > functions.php im Child oder WPCodeBox “MB Enable Dynamic Template Tags”

Aber es geht auch mit Groundhogg (“Replacement Code”), siehe Anleitung!

Use Case: Dynamische Anzeige von Custom Fields

Syntax innerhalb {{}}:

  1. theme: Hier sagen wir, von wo der tag geholt werden soll / fn für Post
  2. company_info: Der Wert unter diesem Parameter soll angezeigt werden / get_the_title für Post-Titel

Nachfolgend beschreibe ich die Optionen je mit einem Beispiel, ansonsten auch hier beschrieben.

field – Gets the custom fields from the current post. Replace field_name with the name of your field: field.fieldname

theme – Gets the custom fields from an options page. Replace field_name with the name of your field. Daten von der MB Settings Page mit MB Custom Fields, deren ID im 2. Teil eingefügt werden). Beispiel: Company Info mit Kontakten, Öffnungszeiten etc: theme.company_info

query – Daten aus der URL anzeigen, die beim Ausfüllen eines Formulares oder anderen Quellen übergeben werden (z.B. Query Parameter “clientname”). Beispiel: Thank-You Page mit persönlicher Anrede, z.B. “Danke, Name!”: query.clientname

hook – Content (z.B. über GP Block-Elements) an beliebigen Stellen einfügen. Hiermit können die vom Theme bereitgestellten Hooks ergänzt werden. Das Block-Element muss als Custom Hook angelegt werden (z.B. demo_cta) > hook.demo_cta

Weitere Optionen:

  • fn
  • field
  • user
  • userm
  • author

Code Snippet

Gesperrt. Das Code-Snippet steht entweder durch einen Einzelkauf oder über unsere Mitgliedschaft zur Verfügung.

Code

/*
 * tct_template_tags
 *
 * @function Automatically calls template tags
 * @author Taylor Drayson
 * @since 26/03/2023
*/
add_filter("render_block", "tct_template_tags", 10, 2);
function tct_template_tags($block_content, $block){
    $prefixes = ['fn', 'query', 'theme', 'field', 'user', 'userm','author', 'hook'];
    $pattern = '/{{('. implode('|', $prefixes) .')\.(\w+)}}/';

    $new_content = preg_replace_callback($pattern, function($matches) {

        $dynamic_tag = trim($matches[2]);

        switch($matches[1]){
            case 'fn':
                if(!function_exists($dynamic_tag)) return;
                return call_user_func($dynamic_tag);
                break;
            case 'query': // Query param
                return isset($_GET[$dynamic_tag]) ? sanitize_text_field($_GET[$dynamic_tag]) : '';
                break;
            case 'theme': // Settings page
				if(!function_exists('rwmb_meta')) break;
                return rwmb_meta($dynamic_tag, ['object_type' => 'setting'], 'business-details');
                break;
            case 'field': // Metabox Field
				if(!function_exists('rwmb_meta')) break;
				return rwmb_meta($dynamic_tag, [], get_the_ID());
                break;
            case 'user': // Supported user info https://tct.so/User-info
                $current_user = wp_get_current_user();
                return $current_user->$dynamic_tag;
                break;
            case 'userm': // User meta
                $user_id = get_current_user_id();
                return get_user_meta($user_id, $dynamic_tag, true);
                break;
            case 'author': // Supported author info https://tct.so/author-values
                return get_the_author_meta($dynamic_tag);
                break;
            case 'hook':
                ob_start();
                do_action( $dynamic_tag );
                return ob_get_clean();
                break;
        }

        // Otherwise, return the original text
        return $matches[0];
    }, $block_content);

    return $new_content;

}