Vorlage für neues Visual Composer Element mit Shortcode

4 min read

<?php
if ( ! defined( 'ABSPATH' ) ) {
    die( '-1' );
}

function budi_default($atts, $content = null){
    // Attribute einlesen, auf default setzen falls nicht angegeben
    $atts = shortcode_atts([
         'heading' => '',
         'color' => '#ff00ff',
         'button' => '',
         'layout' => 'design-1',

         'css' => '',
         'extra_css' => '',
    ], $atts);

    // Genutzt CSS Datei nur einbauen, wenn Element auch wirklich vorhanden ist. Bitte statt wp_enqueue_style verwenden
    // Unbedingt eigenen namen vergeben!!!!!
    // budi_add_style( 'budi-tiles', this_dir_url(__FILE__) . 'style.css' );
    // budi_add_script( 'budi-tiles-script', this_dir_url(__FILE__) . 'script.js' );

    // CSS Klassen für Abstände, Rahmen, Padding, Margin aus WPBakery übernehmen
    $css_class = sc_merge_css( $atts['css'], $atts['extra_css'] );

    ob_start();
    ?>

    <section class="<?php echo $css_class; ?>">
        <h2 class="text-center" style="color: <?php echo $atts['color']; ?>"><?php echo $atts["heading"]; ?></h2>

        <div class="content">
            <?php echo nl2br( $content ); ?>
        </div>

        <?php if( $atts["button"] ) { ?>
            <?php
            $link = vc_build_link( $atts["button"] );
            ?>
            <a href="<?php echo $link['url']; ?>" class="button white" target="<?php echo $link['target']; ?>"><?php echo $link['title']; ?></a>
        <?php } ?>
    </section>

    <?php
    // HTML Output in Variable packen und zurück geben
    $output = ob_get_contents();
    ob_end_clean();

    return $output;
}
// Shortcode hinzufügen
add_shortcode('shortcodebase', 'budi_default'); // [shortcode-name heading="Titel" text="lorem ipsum dolor sit amet" ...]



/*
    WPBakery den Shortcode beibringen und Datenfelder beschreiben für das Konfig-Feld

    REFERENZ: https://kb.wpbakery.com/docs/inner-api/vc_map/
*/

add_action( 'vc_before_init', function(){

    if( !function_exists('vc_map') ){ return; }
    
    vc_map( array(
        "name" => "Shortcode Vorlage",                               // Titel in WPBakery
        "description" => "Beschreibung des Shortcodes",              // Beschreibung des Shortcodes in der Elemente-Übersicht
        "base" => "shortcodebase",                                  // Shortcode Base aus Zeile 57
        "class" => "",
        "icon" => this_dir_url(__FILE__) . 'bundesweit.digital.png', // URL zum Element-Icon
        "category" => "bundesweit.digital",                          // Kategorie Tab in die das Element eingeordnet wird, Standardmäßig bundesweit.digital
        "content_element" => true,
        "holder" => "div",
        "params" => array(
            array(
                "type" => "description",
                "param_name" => "_not_used",
                "heading" => "Shortcode Vorlage",                      // Titel des Shortcodes beim "Einstellen/Konfigurieren"
                "image" => WIKI_BASE_URL . '/wp-content/uploads/2021/07/vorlage.png',  // Optional URL zum Bild (WIKI_BASE_URL Konstante zeigt auf Wiki, also Link nur ab /wp-content/... notwendig)
                "read_more_link" => WIKI_BASE_URL . '/docs/%%SLUG%%/',  // URL zum Wiki Eintrag
                "description" => "Langer Beschreibungstext",           // Langer Beschreibungstext zum Element beim "Einstellen/Konfigurieren"
            ),
            // Optionsfelder / Datenfelder die benötigt werden
            array(
                "type" => "textfield",     // [textfield, checkbox, textarea_html (wysiwig), attach_image, dropdown, textarea, loop]
                "class" => "",
                "heading" => "Überschrift",
                "param_name" => "heading", // Parameter Name soll übereinstimmen mit ab Zeile 15 definierten Feldern
                "value" => "Überschrift",
                "description" => "",
                "admin_label" => true          // Admin Label bedeutet, dass diese Einstellung auf der "Seite Bearbeiten" Ansicht beim Element angezeigt wird
            ),
            array(
                "type" => "autocomplete",     // [textfield, checkbox, textarea_html (wysiwig), attach_image, attach_images, dropdown, textarea, loop]
                "class" => "",
                "heading" => "Mitarbeiter",
                "param_name" => 'param_mitarbeiter', // Parameter Name soll übereinstimmen mit ab Zeile 15 definierten Feldern
                'settings'    => array(
                    'multiple' => true,			// Können mehrere Mitarbeiter ausgewählt werden?
                    'sortable' => true,			// Per Drag and Drop sortierbar
                    'display_inline' => true,			//
                    'values' => get_posts_for_autocomplete('mitarbeiter'),
                ),
                "description" => "",
                "admin_label" => false,          // Admin Label bedeutet, dass diese Einstellung auf der "Seite Bearbeiten" Ansicht beim Element angezeigt wird
            ),
            /*
            array(
                "type" => "colorpicker",     // [textfield, checkbox, textarea_html (wysiwig), attach_image, dropdown, textarea, loop]
                "class" => "",
                "heading" => "Überschrift Farbe",
                "param_name" => "color", // Parameter Name soll übereinstimmen mit ab Zeile 12 definierten Feldern
                "value" => "",
                "description" => "",
                "admin_label" => false
            ),
            array(
                "type" => "textarea_html",     // Standard WP HTML Editor, nur einer sollte pro Shortcode verwendet werden
                "class" => "",
                "heading" => "Text",
                "param_name" => "content", // Beim type textarea_html sollte content als param_name gewählt werden, dies wird in den Shortcode als zweiter Paramter übergeben
                "value" => "",
                "description" => "",
                "admin_label" => true
            ),
            array(
                "type" => "vc_link",               // vc_link ist der standard WP Link-Picker der auch bei ACF verwendet wurde.
                "class" => "",
                "heading" => "Optionaler Button",
                "param_name" => "button",
                "value" => "",
                "description" => "",
                "admin_label" => false
            ),*/
            array(
                "type" => "textfield",
                "class" => "",
                "heading" => "Extra CSS Class",
                "param_name" => "extra_css",
                "value" => "",
                "description" => "",
            ),
            array(
              'type' => 'css_editor',
              'heading' => 'CSS',
              'param_name' => 'css',
              'group' => 'Design Options',
            ),
        ),
    ) );
} );


?>

 

Powered by BetterDocs