prefix . 'wp_multi_shortcodes'; // Name der Tabelle mit Präfix $charset_collate = $wpdb->get_charset_collate(); // SQL-Abfrage zum Erstellen der Tabelle $sql = "CREATE TABLE $table_name ( id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, shortcode_name varchar(255) NOT NULL, shortcode_content text NOT NULL, PRIMARY KEY (id), UNIQUE KEY shortcode_name (shortcode_name) ) $charset_collate;"; // Datenbank abfragen und ausführen require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } register_activation_hook( WP_MULTI_FILE, 'wp_multi_create_shortcodes_table' ); // Der Shortcodes-Menüpunkt wird zentral in wp_multi_register_admin_menus() registriert. // Callback-Funktion für das Shortcode-Verwaltungs-Interface function wp_multi_shortcode_page() { global $wpdb; $message = ''; // Variable für benutzerdefinierte Nachrichten // Verarbeite das Speichern von Shortcodes if (isset($_POST['wp_multi_shortcode_name']) && isset($_POST['wp_multi_shortcode_content'])) { check_admin_referer('wp_multi_save_shortcode', 'wp_multi_shortcode_nonce'); // Hole die übermittelten Shortcodes $name = sanitize_key($_POST['wp_multi_shortcode_name']); $content = wp_kses_post(wp_unslash($_POST['wp_multi_shortcode_content'])); // Prüfen, ob der Shortcode bereits existiert $existing_shortcode = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}wp_multi_shortcodes WHERE shortcode_name = %s", $name)); if ($existing_shortcode) { // Aktualisiere den Shortcode, falls er bereits existiert $wpdb->update( $wpdb->prefix . 'wp_multi_shortcodes', ['shortcode_content' => $content], ['shortcode_name' => $name] ); $message = 'Shortcode wurde aktualisiert!'; } else { // Andernfalls einen neuen Shortcode einfügen $wpdb->insert( $wpdb->prefix . 'wp_multi_shortcodes', [ 'shortcode_name' => $name, 'shortcode_content' => $content ] ); $message = 'Shortcode wurde hinzugefügt!'; } } // Shortcode löschen if (isset($_GET['delete_shortcode']) && !empty($_GET['delete_shortcode'])) { check_admin_referer('wp_multi_delete_shortcode_' . intval($_GET['delete_shortcode'])); $delete_id = intval($_GET['delete_shortcode']); $wpdb->delete( $wpdb->prefix . 'wp_multi_shortcodes', ['id' => $delete_id] ); $message = 'Shortcode wurde gelöscht!'; } // Holen der gespeicherten Shortcodes aus der Datenbank $custom_shortcodes = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wp_multi_shortcodes"); wpmt_admin_page_open( __('Shortcodes', 'wp-multi'), __('Eigene Shortcodes erstellen, die im Editor eingefügt werden können', 'wp-multi') ); if (!empty($message)) { wpmt_admin_notice('success', $message); } wpmt_admin_card_open(__('Shortcode anlegen / aktualisieren', 'wp-multi')); ?>
id), 'wp_multi_delete_shortcode_' . $shortcode->id ); ?>
[shortcode_name); ?>] shortcode_content, 15)); ?>
get_results("SELECT * FROM {$wpdb->prefix}wp_multi_shortcodes"); // Wenn keine benutzerdefinierten Shortcodes vorhanden sind, abbrechen if (empty($custom_shortcodes)) { return; } // Definiere die Shortcodes in WordPress foreach ($custom_shortcodes as $shortcode) { add_shortcode($shortcode->shortcode_name, function() use ($shortcode) { return wp_kses_post($shortcode->shortcode_content); }); } } add_action('init', 'wp_multi_register_custom_shortcodes'); // Inhalt der Meta-Box anzeigen function wp_multi_render_shortcode_meta_box($post) { global $wpdb; // Alle gespeicherten Shortcodes aus der Datenbank holen $shortcodes = $wpdb->get_results("SELECT shortcode_name FROM {$wpdb->prefix}wp_multi_shortcodes"); if (!empty($shortcodes)) { echo ''; echo ''; } else { echo '

Keine Shortcodes vorhanden.

'; } } // JavaScript für Meta-Box einbinden (Classic Editor: fügt den gewählten Shortcode ein) function wp_multi_enqueue_admin_scripts($hook) { if ('post.php' === $hook || 'post-new.php' === $hook) { wp_enqueue_script('wp-multi-shortcode', plugin_dir_url(WP_MULTI_FILE) . 'js/classic-editor-shortcodes.js', array('jquery'), '1.0', true); } } add_action('admin_enqueue_scripts', 'wp_multi_enqueue_admin_scripts'); // Funktion zum Registrieren des TinyMCE Plugins function wp_multi_add_shortcode_button() { add_filter('mce_external_plugins', 'wp_multi_register_tinymce_plugin'); add_filter('mce_buttons', 'wp_multi_add_tinymce_button'); } add_action('admin_head', 'wp_multi_add_shortcode_button'); // Plugin für TinyMCE registrieren (angepasster Pfad zum JS-File) function wp_multi_register_tinymce_plugin($plugins) { $plugins['wp_multi_shortcodes'] = plugin_dir_url(WP_MULTI_FILE) . 'js/tinymce-shortcodes.js'; return $plugins; } // Button zur TinyMCE Toolbar hinzufügen function wp_multi_add_tinymce_button($buttons) { array_push($buttons, 'wp_multi_shortcodes'); return $buttons; } // Shortcodes aus der Datenbank für das JavaScript bereitstellen function wp_multi_localize_shortcodes() { global $wpdb; $shortcodes = $wpdb->get_results("SELECT shortcode_name FROM {$wpdb->prefix}wp_multi_shortcodes", ARRAY_A); // Shortcodes als JSON an das JS-File übergeben wp_enqueue_script('wp-multi-tinymce', plugin_dir_url(WP_MULTI_FILE) . 'js/tinymce-shortcodes.js', array('jquery'), null, true); wp_localize_script('wp-multi-tinymce', 'wpMultiShortcodes', $shortcodes); } add_action('admin_enqueue_scripts', 'wp_multi_localize_shortcodes');