Minecraft-Modern-Theme/functions.php aktualisiert
This commit is contained in:
@@ -428,10 +428,10 @@ function minecraft_modern_scroll_to_top_script() {
|
||||
add_action('wp_enqueue_scripts', 'minecraft_modern_scroll_to_top_script');
|
||||
|
||||
// =============================================================================
|
||||
// === THEME SETTINGS EXPORT / IMPORT (KORRIGIERTE VERSION) =================
|
||||
// === THEME SETTINGS EXPORT / IMPORT (VOLLSTÄNDIG KORRIGIERT) ===============
|
||||
// =============================================================================
|
||||
|
||||
// 1. Export Handler (Download) - ERWEITERT UM TEAM
|
||||
// 1. Export Handler (Download) - ALLE EINSTELLUNGEN
|
||||
add_action( 'admin_post_export_theme_settings', 'handle_theme_settings_export' );
|
||||
|
||||
function handle_theme_settings_export() {
|
||||
@@ -443,25 +443,30 @@ function handle_theme_settings_export() {
|
||||
// Theme Slug ermitteln
|
||||
$theme_slug = get_option( 'stylesheet' );
|
||||
|
||||
// 1. Theme Mods (Customizer & Announcement Settings) holen
|
||||
// 1. Theme Mods (Customizer-Einstellungen) holen
|
||||
$mods = get_theme_mods();
|
||||
|
||||
// 2. Announcement Settings manuell hinzufügen (siehe vorheriger Schritt)
|
||||
$mods['mm_announcement_enabled'] = get_option('mm_announcement_enabled');
|
||||
$mods['mm_announcement_text'] = get_option('mm_announcement_text');
|
||||
$mods['mm_announcement_bg'] = get_option('mm_announcement_bg');
|
||||
$mods['mm_announcement_color'] = get_option('mm_announcement_color');
|
||||
$mods['mm_announcement_font_size'] = get_option('mm_announcement_font_size');
|
||||
$mods['mm_announcement_font_family'] = get_option('mm_announcement_font_family');
|
||||
$mods['mm_announcement_position'] = get_option('mm_announcement_position');
|
||||
$mods['mm_announcement_countdown_enabled'] = get_option('mm_announcement_countdown_enabled');
|
||||
$mods['mm_announcement_countdown_label'] = get_option('mm_announcement_countdown_label');
|
||||
$mods['mm_announcement_countdown_date'] = get_option('mm_announcement_countdown_date');
|
||||
$mods['mm_announcement_countdown_expired_msg'] = get_option('mm_announcement_countdown_expired_msg');
|
||||
// 2. Announcement Settings manuell hinzufügen
|
||||
$announcement_keys = array(
|
||||
'mm_announcement_enabled',
|
||||
'mm_announcement_text',
|
||||
'mm_announcement_bg',
|
||||
'mm_announcement_color',
|
||||
'mm_announcement_font_size',
|
||||
'mm_announcement_font_family',
|
||||
'mm_announcement_position',
|
||||
'mm_announcement_countdown_enabled',
|
||||
'mm_announcement_countdown_label',
|
||||
'mm_announcement_countdown_date',
|
||||
'mm_announcement_countdown_expired_msg'
|
||||
);
|
||||
|
||||
// 3. --- NEU: Team Daten holen ---
|
||||
foreach ( $announcement_keys as $key ) {
|
||||
$mods[$key] = get_option($key);
|
||||
}
|
||||
|
||||
// 3. Team Daten holen
|
||||
$team_data = array();
|
||||
// Hole alle Teammitglieder sortiert nach Reihenfolge
|
||||
$team_query = new WP_Query(array(
|
||||
'post_type' => 'team_member',
|
||||
'posts_per_page' => -1,
|
||||
@@ -470,18 +475,20 @@ function handle_theme_settings_export() {
|
||||
));
|
||||
|
||||
if ( $team_query->have_posts() ) {
|
||||
while ( $team_query->have_posts() ) : $team_query->the_post();
|
||||
while ( $team_query->have_posts() ) {
|
||||
$team_query->the_post();
|
||||
|
||||
$team_data[] = array(
|
||||
'title' => get_the_title(),
|
||||
'content' => get_the_content(),
|
||||
'rank' => get_post_meta( get_the_ID(), '_team_member_rank', true ),
|
||||
'menu_order' => get_post_field( 'menu_order', get_the_ID() ),
|
||||
// Bilder werden NICHT exportiert (siehe Hinweis unten)
|
||||
);
|
||||
endwhile;
|
||||
}
|
||||
wp_reset_postdata(); // WICHTIG: Post-Daten zurücksetzen
|
||||
}
|
||||
|
||||
$mods['team_data'] = $team_data;
|
||||
// --- ENDE TEAM EXPORT ---
|
||||
|
||||
// Daten als JSON vorbereiten
|
||||
$data = json_encode( $mods, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
|
||||
@@ -496,7 +503,7 @@ function handle_theme_settings_export() {
|
||||
exit;
|
||||
}
|
||||
|
||||
// 2. Import Handler (AJAX) - ERWEITERT UM TEAM
|
||||
// 2. Import Handler (AJAX) - ALLE EINSTELLUNGEN
|
||||
add_action( 'wp_ajax_import_theme_settings', 'handle_theme_settings_import' );
|
||||
|
||||
function handle_theme_settings_import() {
|
||||
@@ -521,35 +528,55 @@ function handle_theme_settings_import() {
|
||||
wp_send_json_error( __( 'Die hochgeladene Datei ist keine gültige JSON-Datei.', 'minecraft-modern-theme' ) );
|
||||
}
|
||||
|
||||
// 1. Theme Mods & Announcement importieren (siehe vorheriger Code)
|
||||
// Announcement Keys definieren
|
||||
$announcement_keys = array(
|
||||
'mm_announcement_enabled',
|
||||
'mm_announcement_text',
|
||||
'mm_announcement_bg',
|
||||
'mm_announcement_color',
|
||||
'mm_announcement_font_size',
|
||||
'mm_announcement_font_family',
|
||||
'mm_announcement_position',
|
||||
'mm_announcement_countdown_enabled',
|
||||
'mm_announcement_countdown_label',
|
||||
'mm_announcement_countdown_date',
|
||||
'mm_announcement_countdown_expired_msg'
|
||||
);
|
||||
|
||||
// KRITISCHER FIX: Team Daten VORHER extrahieren und aus Array entfernen
|
||||
$team_data = isset($data['team_data']) ? $data['team_data'] : array();
|
||||
unset($data['team_data']); // Verhindert Fehler beim Durchlaufen der Theme Mods
|
||||
|
||||
// 1. Theme Mods & Announcement importieren
|
||||
foreach ( $data as $mod_key => $mod_value ) {
|
||||
// Differenzierung wie beim Export
|
||||
if ( strpos( $mod_key, 'mm_announcement_' ) === 0 ) {
|
||||
// Unterscheidung: Announcement = Option, Rest = Theme Mod
|
||||
if ( in_array( $mod_key, $announcement_keys ) ) {
|
||||
update_option( $mod_key, $mod_value );
|
||||
} else {
|
||||
set_theme_mod( $mod_key, $mod_value );
|
||||
}
|
||||
}
|
||||
|
||||
// 2. --- NEU: Team Daten importieren ---
|
||||
if ( isset( $data['team_data'] ) && ! empty( $data['team_data'] ) ) {
|
||||
// 2. Team Daten importieren
|
||||
if ( ! empty( $team_data ) ) {
|
||||
|
||||
// Option 1: Vorherige Team-Mitglieder löschen (Clean Import)
|
||||
// Wir force-delete alle Posts, damit die Liste exakt so ist wie im Backup.
|
||||
// Vorherige Team-Mitglieder löschen (Clean Import)
|
||||
$existing_team = new WP_Query(array(
|
||||
'post_type' => 'team_member',
|
||||
'posts_per_page' => -1,
|
||||
'fields' => 'ids' // Nur IDs holen, schneller
|
||||
'fields' => 'ids'
|
||||
));
|
||||
|
||||
if ( $existing_team->have_posts() ) {
|
||||
while ( $existing_team->have_posts() ) {
|
||||
wp_delete_post( $existing_team->next_post()->ID, true ); // true = force delete
|
||||
foreach ( $existing_team->posts as $post_id ) {
|
||||
wp_delete_post( $post_id, true ); // true = permanent löschen
|
||||
}
|
||||
}
|
||||
wp_reset_postdata(); // WICHTIG: Post-Daten zurücksetzen
|
||||
|
||||
// Neue Mitglieder anlegen
|
||||
foreach ( $data['team_data'] as $member ) {
|
||||
$id = wp_insert_post(array(
|
||||
foreach ( $team_data as $member ) {
|
||||
$new_id = wp_insert_post(array(
|
||||
'post_title' => sanitize_text_field( $member['title'] ),
|
||||
'post_content' => sanitize_textarea_field( $member['content'] ),
|
||||
'post_type' => 'team_member',
|
||||
@@ -557,16 +584,14 @@ function handle_theme_settings_import() {
|
||||
'menu_order' => isset( $member['menu_order'] ) ? intval( $member['menu_order'] ) : 0
|
||||
));
|
||||
|
||||
if ( $id && ! is_wp_error( $id ) ) {
|
||||
if ( $new_id && ! is_wp_error( $new_id ) ) {
|
||||
// Rang als Meta-Data speichern
|
||||
if ( isset( $member['rank'] ) ) {
|
||||
update_post_meta( $id, '_team_member_rank', sanitize_text_field( $member['rank'] ) );
|
||||
}
|
||||
// Bilder werden NICFT importiert (siehe Hinweis unten)
|
||||
update_post_meta( $new_id, '_team_member_rank', sanitize_text_field( $member['rank'] ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- ENDE TEAM IMPORT ---
|
||||
|
||||
wp_send_json_success( __( 'Einstellungen und Team erfolgreich importiert! Bilder müssen ggf. neu hochgeladen werden.', 'minecraft-modern-theme' ) );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user