diff --git a/teamcard-admin.css b/teamcard-admin.css
new file mode 100644
index 0000000..504a5cf
--- /dev/null
+++ b/teamcard-admin.css
@@ -0,0 +1,157 @@
+.teamcard-admin {
+ margin: 20px 0;
+}
+
+.teamcard-add-new-form {
+ background: #fff;
+ border: 1px solid #ccd0d4;
+ box-shadow: 0 1px 1px rgba(0,0,0,.04);
+ padding: 20px;
+ margin-bottom: 20px;
+}
+
+.form-fields {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15px;
+}
+
+.form-field {
+ flex: 1 0 200px;
+}
+
+.form-field label {
+ display: block;
+ margin-bottom: 5px;
+ font-weight: 600;
+}
+
+.form-field input[type="text"] {
+ width: 100%;
+ padding: 8px;
+}
+
+.teamcard-item td {
+ vertical-align: middle;
+}
+
+.teamcard-bild {
+ cursor: move;
+}
+
+.image-preview-container {
+ margin-bottom: 10px;
+ min-height: 50px;
+}
+
+.teamcard-bild-vorschau {
+ max-width: 80px;
+ max-height: 80px;
+ border-radius: 4px;
+}
+
+.editable {
+ padding: 8px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ transition: all 0.2s;
+}
+
+.editable:hover {
+ border-color: #ddd;
+ background-color: #f9f9f9;
+ cursor: pointer;
+}
+
+.inline-edit {
+ width: 100%;
+ padding: 6px;
+}
+
+.ui-state-highlight {
+ height: 80px;
+ background-color: #f0f0f0;
+ border: 1px dashed #ccc;
+}
+
+#teamcard-message {
+ position: fixed;
+ top: 50px;
+ right: 20px;
+ z-index: 9999;
+ max-width: 300px;
+}
+
+/* Container für das Teamkarten-Grid */
+.teamcard-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ justify-content: center;
+ margin-top: 30px;
+}
+
+/* Stil für jedes Teammitglied */
+.teamcard {
+ border: 2px solid #e0e0e0;
+ border-radius: 10px;
+ padding: 20px;
+ width: 280px;
+ text-align: center;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ background-color: #fff;
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+/* Hover-Effekte */
+.teamcard:hover {
+ transform: translateY(-10px);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
+}
+
+/* Bild des Teammitglieds */
+.teamcard img {
+ max-width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ margin-bottom: 15px;
+ transition: transform 0.3s ease;
+}
+
+/* Hover-Effekt für das Bild */
+.teamcard:hover img {
+ transform: scale(1.1);
+}
+
+/* Name des Teammitglieds */
+.teamcard h3 {
+ font-size: 1.2em;
+ font-weight: 600;
+ margin: 10px 0;
+ color: #333;
+}
+
+/* Funktion und Zuständigkeit des Teammitglieds */
+.teamcard p {
+ font-size: 0.95em;
+ color: #666;
+ margin-bottom: 10px;
+}
+
+/* Stil für den Hover-Effekt beim Teammitglied */
+.teamcard:hover h3,
+.teamcard:hover p {
+ color: #0073e6;
+}
+
+/* Stil für den Container der Teamkarten auf mobilen Geräten */
+@media (max-width: 768px) {
+ .teamcard-grid {
+ justify-content: space-evenly;
+ }
+
+ .teamcard {
+ width: 100%;
+ max-width: 320px;
+ }
+}
diff --git a/teamcard-admin.js b/teamcard-admin.js
new file mode 100644
index 0000000..886c22b
--- /dev/null
+++ b/teamcard-admin.js
@@ -0,0 +1,237 @@
+jQuery(document).ready(function($) {
+ // Medienbibliothek für neues Teammitglied
+ var newTeamcardFrame;
+
+ $('#new-teamcard-bild-button').on('click', function(e) {
+ e.preventDefault();
+
+ if (newTeamcardFrame) {
+ newTeamcardFrame.open();
+ return;
+ }
+
+ newTeamcardFrame = wp.media({
+ title: 'Bild auswählen',
+ button: { text: 'Verwenden' },
+ multiple: false
+ });
+
+ newTeamcardFrame.on('select', function() {
+ var attachment = newTeamcardFrame.state().get('selection').first().toJSON();
+ $('#new-teamcard-bild-id').val(attachment.id);
+ $('#new-teamcard-bild-vorschau').attr('src', attachment.url).show();
+ });
+
+ newTeamcardFrame.open();
+ });
+
+ // Medienbibliothek für vorhandene Teammitglieder
+ var teamcardFrame;
+
+ $(document).on('click', '.teamcard-bild-button', function(e) {
+ e.preventDefault();
+
+ var button = $(this);
+ var teamcardId = button.data('id');
+
+ if (teamcardFrame) {
+ teamcardFrame.open();
+ return;
+ }
+
+ teamcardFrame = wp.media({
+ title: 'Bild auswählen',
+ button: { text: 'Verwenden' },
+ multiple: false
+ });
+
+ teamcardFrame.on('select', function() {
+ var attachment = teamcardFrame.state().get('selection').first().toJSON();
+
+ $.ajax({
+ url: teamcard_data.ajax_url,
+ type: 'POST',
+ data: {
+ action: 'update_teamcard_image',
+ id: teamcardId,
+ bild_id: attachment.id,
+ nonce: teamcard_data.nonce
+ },
+ success: function(response) {
+ if (response.success) {
+ var container = button.siblings('.image-preview-container');
+ container.html('');
+ showMessage('Bild erfolgreich aktualisiert', 'success');
+ }
+ }
+ });
+ });
+
+ teamcardFrame.open();
+ });
+
+ // Neues Teammitglied hinzufügen
+ $('#add-teamcard-button').on('click', function() {
+ var name = $('#new-teamcard-name').val();
+ var funktion = $('#new-teamcard-funktion').val();
+ var zustaendigkeit = $('#new-teamcard-zustaendigkeit').val();
+ var bildId = $('#new-teamcard-bild-id').val();
+
+ if (!name) {
+ showMessage('Bitte gib einen Namen ein', 'error');
+ return;
+ }
+
+ $.ajax({
+ url: teamcard_data.ajax_url,
+ type: 'POST',
+ data: {
+ action: 'add_teamcard',
+ name: name,
+ funktion: funktion,
+ zustaendigkeit: zustaendigkeit,
+ bild_id: bildId,
+ nonce: teamcard_data.nonce
+ },
+ success: function(response) {
+ if (response.success) {
+ var bildHtml = '';
+ if (response.data.bild_url) {
+ bildHtml = '
';
+ }
+
+ var newRow = '
' + message + '
').show(); + + setTimeout(function() { + messageElement.fadeOut(); + }, 3000); + } +}); diff --git a/teamcards-plugin.php b/teamcards-plugin.php new file mode 100644 index 0000000..70f85d6 --- /dev/null +++ b/teamcards-plugin.php @@ -0,0 +1,359 @@ + [ + 'name' => 'Teammitglieder', + 'singular_name' => 'Teammitglied', + 'add_new' => 'Neues Teammitglied', + 'add_new_item' => 'Teammitglied hinzufügen', + 'edit_item' => 'Teammitglied bearbeiten', + ], + 'public' => true, + 'show_ui' => false, // Standard-UI ausblenden + 'show_in_menu' => false, // Nicht im Hauptmenü anzeigen + 'menu_icon' => 'dashicons-groups', + 'supports' => ['title'], + 'has_archive' => false, + 'show_in_admin_bar' => false, + ]); + + register_taxonomy('teamcard_kategorie', 'teamcard', [ + 'labels' => [ + 'name' => 'Kategorien', + 'singular_name' => 'Kategorie', + ], + 'hierarchical' => true, + 'public' => true, + 'show_admin_column' => true, + ]); +} +add_action('init', 'teamcard_register_post_type'); + +// Admin-Menü hinzufügen +function teamcard_add_admin_menu() { + add_menu_page( + 'Teammitglieder verwalten', + 'Teamkarten', + 'manage_options', + 'teamcard_management', + 'teamcard_admin_page', + 'dashicons-groups', + 30 + ); +} +add_action('admin_menu', 'teamcard_add_admin_menu'); + +// Die Hauptverwaltungsseite +function teamcard_admin_page() { + ?> +Ziehe die Zeilen, um die Reihenfolge zu ändern. Klicke auf die Felder, um sie zu bearbeiten.
+ + +Bild | +Name | +Funktion | +Zuständigkeit | +Aktionen | +
---|---|---|---|---|
+
+
+
+
+ |
+
+ post_title); ?>
+ |
+ + + | ++ + | ++ + | +
Keine Teammitglieder gefunden.
'; + + ob_start(); + echo '' . esc_html($funktion) . '
'; + echo '' . esc_html($zustaendigkeit) . '
'; + echo '