40,'width'=>40,'flex-height'=>true,'flex-width'=>true]); add_theme_support('post-thumbnails'); add_theme_support('html5', ['search-form','comment-form','comment-list','gallery','caption']); load_theme_textdomain('bluesky-mc', get_template_directory() . '/languages'); register_nav_menus(['primary' => 'Hauptmenü']); } add_action('after_setup_theme', 'bluesky_setup'); // ============================================================ // ENQUEUE // ============================================================ function bluesky_enqueue() { wp_enqueue_style('bluesky-style', get_stylesheet_uri(), [], '2.0.0'); // Dynamic CSS-Variablen aus Backend $main_color = get_option('bluesky_color_main', '#39BEFF'); $bg_color = get_option('bluesky_color_bg', '#24272B'); $desc_color = get_option('bluesky_color_desc', '#D2D0D0'); $green_color= get_option('bluesky_color_green', '#4AFF6B'); $red_color = get_option('bluesky_color_red', '#FF7C7C'); $custom_css = " :root { --main-color: {$main_color}; --background-color: {$bg_color}; --description-color: {$desc_color}; --green-color: {$green_color}; --red-color: {$red_color}; --copy-ip-button-background: " . bluesky_hex_to_rgba($main_color, 0.7) . "; --stat-icon-background-2: " . bluesky_hex_to_rgba($main_color, 0.5) . "; --ip-copied-background: " . bluesky_hex_to_rgba($green_color, 0.17) . "; --warning-background: " . bluesky_hex_to_rgba($red_color, 0.17) . "; } html, body { background-color: {$bg_color} !important; } "; wp_add_inline_style('bluesky-style', $custom_css); wp_enqueue_script('bluesky-main', get_template_directory_uri() . '/js/main.js', [], '2.0.4', true); wp_localize_script('bluesky-main', 'BlueSkyConfig', [ 'serverIp' => get_option('bluesky_server_ip', 'mc.example.com'), 'discordServerId' => get_option('bluesky_discord_server_id', ''), 'skinType' => get_option('bluesky_skin_type', 'bust'), 'teamData' => bluesky_get_team_data_for_js(), 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('bluesky_nonce'), ]); } add_action('wp_enqueue_scripts', 'bluesky_enqueue'); // Helper: hex to rgba function bluesky_hex_to_rgba($hex, $alpha = 1) { $hex = ltrim($hex, '#'); if (strlen($hex) === 3) $hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2]; list($r,$g,$b) = array_map('hexdec', str_split($hex, 2)); return "rgba($r,$g,$b,$alpha)"; } // ============================================================ // CUSTOM POST TYPES // ============================================================ function bluesky_register_post_types() { $types = [ 'bluesky_team' => ['label'=>'Team Mitglieder','icon'=>'dashicons-groups','pos'=>25,'public'=>false,'supports'=>['title','thumbnail']], 'bluesky_wiki' => ['label'=>'Wiki Artikel','icon'=>'dashicons-book-alt','pos'=>26,'public'=>true,'supports'=>['title','editor','thumbnail'],'archive'=>true,'slug'=>'wiki-artikel'], 'bluesky_rule' => ['label'=>'Server Regeln','icon'=>'dashicons-shield','pos'=>27,'public'=>false,'supports'=>['title']], 'bluesky_faq' => ['label'=>'FAQs','icon'=>'dashicons-editor-help','pos'=>28,'public'=>false,'supports'=>['title','editor']], 'bluesky_vote' => ['label'=>'Vote Links','icon'=>'dashicons-star-filled','pos'=>29,'public'=>false,'supports'=>['title']], 'bluesky_gamemode' => ['label'=>'Spielmodi','icon'=>'dashicons-games','pos'=>30,'public'=>true,'supports'=>['title','editor','thumbnail']], ]; foreach ($types as $key => $t) { $args = [ 'label' => $t['label'], 'public' => $t['public'], 'show_ui' => true, 'show_in_menu' => true, 'menu_icon' => $t['icon'], 'menu_position'=> $t['pos'], 'supports' => $t['supports'], 'show_in_rest' => true, ]; if (!empty($t['archive'])) $args['has_archive'] = true; if (!empty($t['slug'])) $args['rewrite'] = ['slug' => $t['slug']]; register_post_type($key, $args); } } add_action('init', 'bluesky_register_post_types'); // Rule entries use a custom editor layout, not Gutenberg. add_filter('use_block_editor_for_post_type', function($use_block_editor, $post_type) { if ($post_type === 'bluesky_rule') return false; return $use_block_editor; }, 10, 2); // ============================================================ // TAXONOMIES // ============================================================ function bluesky_register_taxonomies() { register_taxonomy('team_rank', 'bluesky_team', ['label'=>'Ränge','hierarchical'=>false,'show_in_rest'=>true,'rewrite'=>false,'show_admin_column'=>true]); register_taxonomy('wiki_category', 'bluesky_wiki', ['label'=>'Wiki Kategorien','hierarchical'=>true,'show_in_rest'=>true,'rewrite'=>['slug'=>'wiki-kategorie'],'show_admin_column'=>true]); register_taxonomy('rule_category', 'bluesky_rule', ['label'=>'Regelkategorien','hierarchical'=>true,'show_in_rest'=>true,'rewrite'=>false,'show_admin_column'=>true]); } add_action('init', 'bluesky_register_taxonomies'); // ============================================================ // META BOXES // ============================================================ function bluesky_add_meta_boxes() { add_meta_box('bluesky_team_meta', 'Mitglied Details', 'bluesky_team_meta_cb', 'bluesky_team', 'normal', 'high'); add_meta_box('bluesky_vote_meta', 'Vote Link Details', 'bluesky_vote_meta_cb', 'bluesky_vote', 'normal', 'high'); add_meta_box('bluesky_gamemode_meta', 'Spielmodus Details', 'bluesky_gamemode_meta_cb', 'bluesky_gamemode', 'normal', 'high'); add_meta_box('bluesky_rule_meta', 'Regel Details', 'bluesky_rule_meta_cb', 'bluesky_rule', 'normal', 'high'); } add_action('add_meta_boxes', 'bluesky_add_meta_boxes'); function bluesky_team_meta_cb($post) { wp_nonce_field('bluesky_team_nonce_action', 'bluesky_team_nonce'); $f = fn($k) => get_post_meta($post->ID, "_bluesky_$k", true); $skin_preview = $f('skin_url') ?: ('https://crafthead.net/bust/' . ($f('in_game_name') ?: 'ec561538f3fd461daff5086b22154bce') . '/128'); $rank_empty = empty($f('rank')); ?>

⚠️ Rang ist leer! Bitte Rang eintragen und speichern — sonst wird "—" auf der Team-Seite angezeigt.

In-Game Name *

Minecraft Username — Skin wird automatisch geladen (Original-Account vorausgesetzt).


Skin-Vorschau
Rangfarbe

Kann rgba() oder #hex sein.

Gruppe

Bestimmt die Gruppenüberschrift auf der Team-Seite.

Eigene Skin-URL

Nur für Cracked/Offline-Accounts nötig.

Reihenfolge
ID, '_bluesky_vote_url', true); $desc = get_post_meta($post->ID, '_bluesky_vote_description', true); ?>
Vote URL *
Beschreibung
ID, '_bluesky_gamemode_services', true); ?>
Features (kommagetrennt)

Werden als Liste unter dem Text angezeigt.

ID, '_bluesky_rule_section_id', true); $sort_order = get_post_meta($post->ID, '_bluesky_rule_sort_order', true); $rule_items = get_post_meta($post->ID, '_bluesky_rule_items', true); ?>
Eigener Regeln-Editor

Eine Regel pro Zeile eintragen. Der WordPress-Inhaltseditor wird für Regeln nicht genutzt.

Für Verlinkung wie /regeln/#regel-1

post_type !== 'bluesky_rule') return; ?>

' . $icon . ' ' . esc_html($title) . '

'; echo '

BlueSky MC Theme — ' . esc_html($title) . '

'; } function bluesky_admin_intro($headline, $description, $steps = []) { echo '
'; echo '

' . esc_html($headline) . '

'; echo '

' . esc_html($description) . '

'; if (!empty($steps)) { echo '
    '; foreach ($steps as $step) { echo '
  1. ' . esc_html($step) . '
  2. '; } echo '
'; } echo '
'; } // 1. Server & Allgemein function bluesky_settings_page() { if (!current_user_can('manage_options')) wp_die('Kein Zugriff'); $saved = bluesky_save_options('bluesky_save_settings', 'bluesky_settings_nonce', ['bluesky_server_name','bluesky_server_ip','bluesky_discord_server_id','bluesky_skin_type'], ['bluesky_discord_link']); if ($saved) echo '

✅ Gespeichert!

'; bluesky_admin_header('Server & Allgemein', '🖥️'); bluesky_admin_intro( 'Schnellstart', 'Diese Seite steuert die wichtigsten Basisdaten des Servers.', [ 'Server Name und IP eintragen', 'Discord-ID nur setzen, wenn das Discord-Widget aktiv ist', 'Speichern klicken und Frontend neu laden' ] ); $skin_types = ['full','bust','head','face','front','frontFull','skin']; ?>
Server Name

Wird im Navbar, Footer und Titel angezeigt.

Server IP

Für Copy-IP Button und Online-Spieler-Counter.

Discord Server ID

Für Online-User-Anzeige. Discord Widget muss aktiviert sein (Server-Einstellungen → Widget).

Discord Einladungslink
Skin Darstellungstyp

Wie der Minecraft-Skin auf der Team-Seite aussieht.

✅ Farben & Design gespeichert!

'; bluesky_admin_header('Design & Farben', '🎨'); bluesky_admin_intro( 'Farben einfach einstellen', 'Passe zuerst nur die 5 Farben an. Eigenes CSS ist optional für Fortgeschrittene.', [ 'Hauptfarbe definieren', 'Hintergrund und Textfarbe prüfen', 'Dann optional eigenes CSS ergänzen' ] ); $colors = [ 'bluesky_color_main' => ['Hauptfarbe (Akzent)', '#39BEFF', 'Links, Buttons, Highlights'], 'bluesky_color_bg' => ['Hintergrundfarbe', '#24272B', 'Seiten-Hintergrund'], 'bluesky_color_desc' => ['Text / Beschreibungsfarbe','#D2D0D0', 'Normaler Fließtext'], 'bluesky_color_green' => ['Erfolgsfarbe (Grün)', '#4AFF6B', 'Bestätigungen, Online-Anzeige'], 'bluesky_color_red' => ['Warnfarbe (Rot)', '#FF7C7C', 'Warnungen, Fehler'], ]; ?>

Farben

[$label, $default, $desc]): ?>

Eigenes CSS

Hier kannst du eigenes CSS hinzufügen das die Theme-Styles ergänzt oder überschreibt.

print(""), 99); } // 3. Navbar & Footer function bluesky_navbar_page() { if (!current_user_can('manage_options')) wp_die('Kein Zugriff'); $saved = bluesky_save_options('bluesky_save_navbar', 'bluesky_navbar_nonce', ['bluesky_nav_home_label','bluesky_nav_wiki_label','bluesky_nav_rules_label','bluesky_nav_team_label', 'bluesky_nav_home_url','bluesky_nav_wiki_url','bluesky_nav_rules_url','bluesky_nav_team_url', 'bluesky_footer_copyright','bluesky_server_name'], ['bluesky_footer_impressum_url','bluesky_footer_datenschutz_url']); if ($saved) echo '

✅ Navbar & Footer gespeichert!

'; bluesky_admin_header('Navbar & Footer', '🔗'); bluesky_admin_intro( 'Navigation bearbeiten', 'Hier passt du Menütexte, Links und Footer-Beschriftungen an.', [ 'Label = sichtbarer Text', 'URL immer mit / beginnen (z.B. /wiki/)', 'Nach Änderungen speichern' ] ); ?>

Navbar Links

'Startseite', 'wiki' => 'Wiki', 'rules' => 'Regeln', 'team' => 'Team', ]; $defaults_label = ['home'=>'Home','wiki'=>'Wiki','rules'=>'Regeln','team'=>'Team']; $defaults_url = ['home'=>'/', 'wiki'=>'/wiki/', 'rules'=>'/regeln/', 'team'=>'/team/']; foreach ($nav_items as $key => $desc): ?>
Label: " style="width:120px">    URL: " style="width:200px">

Logo / Server-Name in Navbar

Server Name (Navbar)

Wird neben dem Logo angezeigt.

Footer

Footer Version

Die Footer-Version bleibt fest im Code und kann hier nicht geaendert werden.

Impressum Link URL
Datenschutz Link URL

✅ Homepage-Texte gespeichert!

'; bluesky_admin_header('Homepage Texte', '🏠'); bluesky_admin_intro( 'Texte nach Bereichen', 'Die Felder sind in Homepage-Blöcke aufgeteilt. Du kannst alles ohne Code anpassen.', [ 'Oben mit Header-Texten starten', 'Dann Über Uns und Discord bearbeiten', 'Zum Schluss speichern' ] ); ?>

Header

Untertitel (über der IP)
Beschreibungstext
"Copy IP" Button Text
"Siehe mehr" Button Text

Über Uns

Abschnitt 1 — Titel
Abschnitt 1 — Text
Abschnitt 2 — Titel
Abschnitt 2 — Text

Discord Sektion

Text

Die Wörter "Problem" und "Discord" werden automatisch farbig hervorgehoben.

Vote Sektion

Beschreibungstext

FAQ Sektion

Untertitel

Regeln-Seite

Warntext

✅ Bilder gespeichert!

'; bluesky_admin_header('Bilder & Medien', '🖼️'); bluesky_admin_intro( 'Bilder austauschen', 'Am einfachsten über die Mediathek wählen. Das Vorschaubild zeigt sofort das Ergebnis.', [ 'Bildfeld auswählen', 'Aus Mediathek wählen klicken', 'Bei Bedarf mit Zurücksetzen auf Standard zurück' ] ); $images = [ 'bluesky_header_bg_url' => ['Header Hintergrundbild', 'images/header-background.jpg', 'Großes Hintergrundbild im Hero-Bereich und Discord-Sektion'], 'bluesky_logo_url' => ['Server Logo (Header)', 'images/logo.png', 'Schwebendes Logo rechts im Header'], 'bluesky_navbar_logo_url' => ['Navbar Logo', 'images/logo.png', 'Kleines Logo links in der Navbar'], 'bluesky_about_image_url' => ['Über-Uns Bild', 'images/teambild.png', 'Bild rechts im "Über Uns" Bereich'], ]; ?>
[$label, $default_file, $desc]): $current = get_option($key, ''); $preview = $current ?: get_template_directory_uri() . '/' . $default_file; $pid = sanitize_title($key); ?>


✅ Gespeichert!

'; } bluesky_admin_header('Impressum & Datenschutz', '📄'); bluesky_admin_intro( 'Rechtstexte pflegen', 'Bearbeite Impressum und Datenschutz direkt mit dem WordPress-Editor.', [ 'Impressum vollständig eintragen', 'Datenschutztext aktualisieren', 'Speichern und Seite prüfen' ] ); ?>

Impressum

Impressum

Angaben gemäß §5 TMG

'), 'bluesky_impressum_content', ['textarea_rows'=>12,'media_buttons'=>true]); ?>

Datenschutzerklärung

Datenschutzerklärung

Datenschutzhinweise

'), 'bluesky_datenschutz_content', ['textarea_rows'=>12,'media_buttons'=>true]); ?>
[get_option('bluesky_nav_home_label','Home'), get_option('bluesky_nav_home_url','/')], 'wiki' => [get_option('bluesky_nav_wiki_label','Wiki'), get_option('bluesky_nav_wiki_url','/wiki/')], 'rules' => [get_option('bluesky_nav_rules_label','Regeln'), get_option('bluesky_nav_rules_url','/regeln/')], 'team' => [get_option('bluesky_nav_team_label','Team'), get_option('bluesky_nav_team_url','/team/')], ]; ?> 'bluesky_team','posts_per_page'=>-1,'post_status'=>'publish','meta_key'=>'_bluesky_sort_order','orderby'=>'meta_value_num','order'=>'ASC']); if ($q->have_posts()) while ($q->have_posts()) { $q->the_post(); $id=get_the_ID(); $g=get_post_meta($id,'_bluesky_team_group',true)?:'Team'; $team_data[$g][]=['inGameName'=>get_post_meta($id,'_bluesky_in_game_name',true),'rank'=>get_post_meta($id,'_bluesky_rank',true),'rankColor'=>get_post_meta($id,'_bluesky_rank_color',true),'skinUrlOrPathToFile'=>get_post_meta($id,'_bluesky_skin_url',true)]; } wp_reset_postdata(); return $team_data; } // ============================================================ // CUSTOM CSS output // ============================================================ function bluesky_output_custom_css() { $css = get_option('bluesky_custom_css',''); if ($css) echo ''; } add_action('wp_head', 'bluesky_output_custom_css', 99); // Force dark background add_action('wp_head', fn() => print(''), 1); // ============================================================ // ADMIN COLUMNS // ============================================================ add_filter('manage_bluesky_team_posts_columns', fn($c) => array_merge($c, ['in_game_name'=>'In-Game Name','rank'=>'Rang','group'=>'Gruppe'])); function bluesky_team_col($col, $id) { if ($col==='in_game_name') echo esc_html(get_post_meta($id,'_bluesky_in_game_name',true)); if ($col==='rank') { $r=get_post_meta($id,'_bluesky_rank',true); $c=get_post_meta($id,'_bluesky_rank_color',true)?:'#999'; echo "".esc_html($r).""; } if ($col==='group') echo esc_html(get_post_meta($id,'_bluesky_team_group',true)?:'Team'); } add_action('manage_bluesky_team_posts_custom_column','bluesky_team_col',10,2); // ============================================================ // DASHBOARD WIDGET // ============================================================ function bluesky_dash_get_update_info($current_version) { $cache_key = 'bluesky_theme_update_info'; $releases_url = 'https://git.viper.ipv64.net/M_Viper/bluesky-theme/releases'; $api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/bluesky-theme/releases/latest'; $normalized_current = ltrim((string) $current_version, "vV"); $default = [ 'latest_version' => $normalized_current, 'latest_tag' => 'v' . $normalized_current, 'release_url' => $releases_url, 'status' => 'unknown', ]; $cached = get_transient($cache_key); if (is_array($cached)) { $data = array_merge($default, $cached); $data['has_update'] = $normalized_current !== '' && version_compare((string) $data['latest_version'], $normalized_current, '>'); return $data; } $result = $default; $response = wp_remote_get($api_url, [ 'timeout' => 8, 'headers' => ['Accept' => 'application/json'], ]); if (!is_wp_error($response) && (int) wp_remote_retrieve_response_code($response) === 200) { $body = json_decode((string) wp_remote_retrieve_body($response), true); if (is_array($body)) { $tag = (string) ($body['tag_name'] ?? ''); $latest = ltrim($tag, "vV"); $html_url = (string) ($body['html_url'] ?? ''); if ($latest !== '') { $result['latest_version'] = $latest; $result['latest_tag'] = $tag !== '' ? $tag : ('v' . $latest); $result['status'] = 'ok'; } if ($html_url !== '') { $result['release_url'] = $html_url; } } } set_transient($cache_key, [ 'latest_version' => $result['latest_version'], 'latest_tag' => $result['latest_tag'], 'release_url' => $result['release_url'], 'status' => $result['status'], ], 6 * HOUR_IN_SECONDS); $result['has_update'] = $normalized_current !== '' && version_compare((string) $result['latest_version'], $normalized_current, '>'); return $result; } add_action('admin_init', 'bluesky_dash_handle_update_refresh'); function bluesky_dash_handle_update_refresh() { if (!is_admin()) { return; } if (empty($_GET['bluesky_refresh_update'])) { return; } if (!current_user_can('manage_options')) { return; } if (empty($_GET['_wpnonce']) || !wp_verify_nonce((string) $_GET['_wpnonce'], 'bluesky_refresh_update')) { return; } delete_transient('bluesky_theme_update_info'); wp_safe_redirect(add_query_arg('bluesky_update_refreshed', '1', admin_url('index.php'))); exit; } add_action('admin_head-index.php', 'bluesky_dash_admin_styles'); function bluesky_dash_admin_styles() { ?> publish ?? 0; $w = wp_count_posts('bluesky_wiki')->publish ?? 0; $f = wp_count_posts('bluesky_faq')->publish ?? 0; $r = wp_count_posts('bluesky_rule')->publish ?? 0; $theme_version = wp_get_theme()->get('Version'); $update_info = bluesky_dash_get_update_info($theme_version); $has_update = !empty($update_info['has_update']); $tiles = [ ['count' => (int) $t, 'label' => 'Team'], ['count' => (int) $w, 'label' => 'Wiki'], ['count' => (int) $f, 'label' => 'FAQs'], ['count' => (int) $r, 'label' => 'Regeln'], ]; ?>
Server IP
Neues Theme-Update verfügbar: (installiert: v) Theme ist auf dem neuesten Stand (v)
Status: Update verfügbar () Aktuell (v)
Release-Seite: Jetzt neu prüfen Releases öffnen Neu geprüft
Settings Design Team + FAQ +
'BlueSky - Startseite','template-wiki.php'=>'BlueSky - Wiki','template-regeln.php'=>'BlueSky - Regeln','template-team.php'=>'BlueSky - Team','template-impressum.php'=>'BlueSky - Impressum']); }); // ============================================================ // AUTO-CREATE PAGES ON ACTIVATION // ============================================================ // ============================================================ // SEITEN AUTOMATISCH ERSTELLEN & REPARIEREN // Läuft bei jedem Admin-Aufruf — prüft und korrigiert alles // ============================================================ function bluesky_ensure_pages() { // Nur einmal pro Stunde prüfen (Performance) if (get_transient('bluesky_pages_checked')) return; set_transient('bluesky_pages_checked', 1, HOUR_IN_SECONDS); $pages = [ 'wiki' => ['Wiki', 'template-wiki.php'], 'regeln' => ['Regeln', 'template-regeln.php'], 'team' => ['Team', 'template-team.php'], 'impressum' => ['Impressum', 'template-impressum.php'], ]; $changed = false; foreach ($pages as $slug => [$title, $tpl]) { $page = get_page_by_path($slug); if (!$page) { // Seite fehlt → erstellen $id = wp_insert_post([ 'post_title' => $title, 'post_name' => $slug, 'post_status' => 'publish', 'post_type' => 'page', ]); if ($id && !is_wp_error($id)) { update_post_meta($id, '_wp_page_template', $tpl); $changed = true; } } else { // Seite existiert → Template prüfen & korrigieren $current = get_post_meta($page->ID, '_wp_page_template', true); if ($current !== $tpl) { update_post_meta($page->ID, '_wp_page_template', $tpl); $changed = true; } // Sicherstellen dass Seite published ist if ($page->post_status !== 'publish') { wp_update_post(['ID' => $page->ID, 'post_status' => 'publish']); $changed = true; } } } // Permalinks neu laden wenn etwas geändert wurde if ($changed) { flush_rewrite_rules(); delete_transient('bluesky_pages_checked'); } } add_action('admin_init', 'bluesky_ensure_pages'); add_action('after_switch_theme', 'bluesky_ensure_pages'); function bluesky_activation() { bluesky_register_post_types(); bluesky_register_taxonomies(); delete_transient('bluesky_pages_checked'); // Force check on activation bluesky_ensure_pages(); flush_rewrite_rules(); } add_action('after_switch_theme', 'bluesky_activation'); // ============================================================ // SETUP-ASSISTENT & SEITEN REPARIEREN // ============================================================ function bluesky_setup_page() { if (!current_user_can('manage_options')) wp_die('Kein Zugriff'); // Seiten erstellen / reparieren if (isset($_POST['bluesky_setup_nonce']) && wp_verify_nonce($_POST['bluesky_setup_nonce'], 'bluesky_run_setup')) { $result = bluesky_create_pages_now(); flush_rewrite_rules(); echo '

✅ ' . esc_html($result) . '

'; } bluesky_admin_header('Setup & Seiten', '🔧'); bluesky_admin_intro( 'Automatische Seiten-Reparatur', 'Falls Links auf die Startseite gehen oder Seiten fehlen, kannst du hier alles automatisch korrigieren.', [ 'Status-Tabelle prüfen', 'Seiten erstellen/reparieren klicken', 'Bei Bedarf Permalinks speichern' ] ); // Status aller Seiten prüfen $pages_config = [ 'team' => ['Team', 'template-team.php'], 'wiki' => ['Wiki', 'template-wiki.php'], 'regeln' => ['Regeln', 'template-regeln.php'], 'impressum' => ['Impressum', 'template-impressum.php'], ]; ?>

Seiten-Status

[$title, $tpl]): $page = get_page_by_path($slug); $exists = !empty($page); $tpl_set = $exists ? get_post_meta($page->ID, '_wp_page_template', true) : ''; $correct_tpl = ($tpl_set === $tpl); $url = home_url('/' . $slug . '/'); ?>
SeiteURLTemplateStatus
✅ OK ⚠️ Falsches Template ❌ Fehlt

Klicke auf den Button um alle fehlenden Seiten zu erstellen und die korrekten Templates zuzuweisen. Bereits vorhandene Seiten werden dabei nicht gelöscht.


Permalinks neu laden

Falls Links immer noch auf die Startseite zeigen, einmal Permalinks flushen:

⚙️ Permalinks-Einstellungen öffnen

Dort einfach auf "Änderungen speichern" klicken — kein anderer Änderung nötig.

['Wiki', 'template-wiki.php'], 'regeln' => ['Regeln', 'template-regeln.php'], 'team' => ['Team', 'template-team.php'], 'impressum' => ['Impressum', 'template-impressum.php'], ]; $ok = 0; foreach ($pages as $slug => [$title, $tpl]) { $page = get_page_by_path($slug); if ($page && get_post_meta($page->ID, '_wp_page_template', true) === $tpl) $ok++; } flush_rewrite_rules(); return "Fertig! $ok/4 Seiten korrekt konfiguriert. Permalinks wurden neu geladen."; } // Menüeintrag für Setup add_action('admin_menu', function() { add_submenu_page('bluesky-settings', 'Setup & Seiten reparieren', '🔧 Setup & Reparieren', 'manage_options', 'bluesky-setup', 'bluesky_setup_page'); }, 20); // Admin-Hinweis falls Seiten fehlen add_action('admin_notices', function() { if (!current_user_can('manage_options')) return; $screen = get_current_screen(); if ($screen && str_contains($screen->id ?? '', 'bluesky')) return; $team_page = get_page_by_path('team'); if (!$team_page) { echo '

⚠️ BlueSky MC Theme: Einige Seiten fehlen noch. Jetzt reparieren →

'; } }); // ============================================================ // WIKI META BOX — Reihenfolge & Excerpt // ============================================================ function bluesky_wiki_meta_boxes() { add_meta_box('bluesky_wiki_meta', 'Wiki Artikel Einstellungen', 'bluesky_wiki_meta_cb', 'bluesky_wiki', 'side', 'high'); } add_action('add_meta_boxes', 'bluesky_wiki_meta_boxes'); function bluesky_wiki_meta_cb($post) { wp_nonce_field('bluesky_wiki_nonce_action', 'bluesky_wiki_nonce'); $order = get_post_meta($post->ID, '_bluesky_wiki_order', true); $icon = get_post_meta($post->ID, '_bluesky_wiki_icon', true); ?>

Niedrigere Zahl = weiter oben

Emoji für die Kachel

💡 Tipp: Beitragsbild setzen → wird als Icon auf der Wiki-Übersicht angezeigt.

description) : ''; ?>

Ein Emoji das neben dem Kategorie-Titel angezeigt wird. z.B. ⚔️ 🏠 💰 🐾 📜

'Kategorie', 'wiki_order' => 'Reihenfolge']); }); add_action('manage_bluesky_wiki_posts_custom_column', function($col, $id) { if ($col === 'wiki_cats') { $terms = get_the_terms($id, 'wiki_category'); echo $terms ? implode(', ', wp_list_pluck($terms, 'name')) : '—'; } if ($col === 'wiki_order') echo get_post_meta($id, '_bluesky_wiki_order', true) ?: '0'; }, 10, 2);