Upload via GUI (39 Dateien)

This commit is contained in:
2026-08-14 07:59:43 +00:00
parent 05a2e1c7b6
commit 90f388f49c
31 changed files with 16919 additions and 5554 deletions
+238
View File
@@ -0,0 +1,238 @@
<?php
/**
* WP Multi Modul: Custom Shortcodes
*
* Automatisch aus wp-multi.php ausgelagert. Wird über den Loader in
* wp-multi.php eingebunden (nur wenn das WP Multi Toolkit aktiv ist).
*/
if (!defined('ABSPATH')) { exit; }
/*
* custom shortcodes
*/
// Funktion, um die Datenbanktabelle für Shortcodes zu erstellen
function wp_multi_create_shortcodes_table() {
global $wpdb;
$table_name = $wpdb->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'));
?>
<form method="post">
<?php wp_nonce_field('wp_multi_save_shortcode', 'wp_multi_shortcode_nonce'); ?>
<div class="wpm-field">
<label class="wpm-field__label" for="wp_multi_shortcode_name"><?php _e('Name des Shortcodes', 'wp-multi'); ?>
<small class="wpm-field__hint"><?php _e('Nur Kleinbuchstaben, Zahlen und Unterstriche.', 'wp-multi'); ?></small>
</label>
<input type="text" name="wp_multi_shortcode_name" id="wp_multi_shortcode_name" required />
</div>
<div class="wpm-field">
<label class="wpm-field__label" for="wp_multi_shortcode_content"><?php _e('Inhalt des Shortcodes', 'wp-multi'); ?></label>
<textarea name="wp_multi_shortcode_content" id="wp_multi_shortcode_content" rows="5" required></textarea>
</div>
<?php submit_button(__('Shortcode speichern', 'wp-multi')); ?>
</form>
<?php
wpmt_admin_card_close();
wpmt_admin_card_open(__('Verfügbare Shortcodes', 'wp-multi'));
if (!empty($custom_shortcodes)) {
?>
<div class="wpm-table-wrap">
<table class="wpm-table">
<thead>
<tr>
<th><?php _e('Shortcode', 'wp-multi'); ?></th>
<th><?php _e('Inhalt', 'wp-multi'); ?></th>
<th><?php _e('Aktionen', 'wp-multi'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($custom_shortcodes as $shortcode) :
$delete_url = wp_nonce_url(
admin_url('admin.php?page=wp_multi_shortcodes&delete_shortcode=' . $shortcode->id),
'wp_multi_delete_shortcode_' . $shortcode->id
);
?>
<tr>
<td><code>[<?php echo esc_html($shortcode->shortcode_name); ?>]</code></td>
<td><?php echo esc_html(wp_trim_words($shortcode->shortcode_content, 15)); ?></td>
<td><a href="<?php echo esc_url($delete_url); ?>" class="wpm-btn wpm-btn--danger" onclick="return confirm('<?php esc_attr_e('Möchten Sie diesen Shortcode wirklich löschen?', 'wp-multi'); ?>');"><?php _e('Löschen', 'wp-multi'); ?></a></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php
} else {
wpmt_admin_notice('info', __('Keine benutzerdefinierten Shortcodes gefunden.', 'wp-multi'));
}
wpmt_admin_card_close();
wpmt_admin_page_close();
}
// Shortcode-Verwaltung: Ermöglicht Benutzern das Erstellen eigener Shortcodes
function wp_multi_register_custom_shortcodes() {
global $wpdb;
// Holen der gespeicherten Shortcodes aus der Datenbank
$custom_shortcodes = $wpdb->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 '<select id="wp_multi_shortcode_dropdown">';
echo '<option value="">-- Shortcode auswählen --</option>';
foreach ($shortcodes as $shortcode) {
echo '<option value="' . esc_attr($shortcode->shortcode_name) . '">' . esc_html($shortcode->shortcode_name) . '</option>';
}
echo '</select>';
echo '<button type="button" class="button button-primary" id="wp_multi_insert_shortcode">Einfügen</button>';
} else {
echo '<p>Keine Shortcodes vorhanden.</p>';
}
}
// 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');