Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d0c7ce557 | ||
|
|
acb12a15bf | ||
|
|
287ee0da24 |
@@ -3622,9 +3622,35 @@ function mm_bewerbung_customizer( $wp_customize ) {
|
|||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
'input_attrs' => array( 'min' => 0, 'max' => 99 ),
|
'input_attrs' => array( 'min' => 0, 'max' => 99 ),
|
||||||
) );
|
) );
|
||||||
|
|
||||||
|
// ── Positionen ──
|
||||||
|
$wp_customize->add_setting( 'mm_bewerbung_positionen', array(
|
||||||
|
'default' => "Moderator
|
||||||
|
Supporter
|
||||||
|
Builder
|
||||||
|
Developer",
|
||||||
|
'sanitize_callback' => 'sanitize_textarea_field',
|
||||||
|
) );
|
||||||
|
$wp_customize->add_control( 'mm_bewerbung_positionen', array(
|
||||||
|
'label' => __( 'Bewerbungs-Positionen', 'minecraft-modern-theme' ),
|
||||||
|
'description' => __( 'Eine Position pro Zeile. Der Bewerber wählt genau eine davon aus.', 'minecraft-modern-theme' ),
|
||||||
|
'section' => 'mm_bewerbung_section',
|
||||||
|
'type' => 'textarea',
|
||||||
|
) );
|
||||||
}
|
}
|
||||||
add_action( 'customize_register', 'mm_bewerbung_customizer' );
|
add_action( 'customize_register', 'mm_bewerbung_customizer' );
|
||||||
|
|
||||||
|
// Hilfsfunktion: Positions-Liste als Array zurückgeben
|
||||||
|
function mm_bewerbung_get_positionen() {
|
||||||
|
$raw = get_theme_mod( 'mm_bewerbung_positionen', "Moderator
|
||||||
|
Supporter
|
||||||
|
Builder
|
||||||
|
Developer" );
|
||||||
|
$list = array_filter( array_map( 'trim', explode( "
|
||||||
|
", $raw ) ) );
|
||||||
|
return array_values( $list );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// --- 2. Custom Post Type: Bewerbung ---
|
// --- 2. Custom Post Type: Bewerbung ---
|
||||||
function mm_register_bewerbung_cpt() {
|
function mm_register_bewerbung_cpt() {
|
||||||
@@ -3674,6 +3700,7 @@ function mm_bewerbung_meta_box_html( $post ) {
|
|||||||
'_mm_bew_mc_name' => __( 'Minecraft Username', 'minecraft-modern-theme' ),
|
'_mm_bew_mc_name' => __( 'Minecraft Username', 'minecraft-modern-theme' ),
|
||||||
'_mm_bew_discord' => __( 'Discord Username', 'minecraft-modern-theme' ),
|
'_mm_bew_discord' => __( 'Discord Username', 'minecraft-modern-theme' ),
|
||||||
'_mm_bew_alter' => __( 'Alter', 'minecraft-modern-theme' ),
|
'_mm_bew_alter' => __( 'Alter', 'minecraft-modern-theme' ),
|
||||||
|
'_mm_bew_position' => __( 'Bewirbt sich als', 'minecraft-modern-theme' ),
|
||||||
'_mm_bew_warum' => __( 'Warum möchtest du mitspielen?', 'minecraft-modern-theme' ),
|
'_mm_bew_warum' => __( 'Warum möchtest du mitspielen?', 'minecraft-modern-theme' ),
|
||||||
'_mm_bew_erfahrung' => __( 'Erfahrung / Vorstellung', 'minecraft-modern-theme' ),
|
'_mm_bew_erfahrung' => __( 'Erfahrung / Vorstellung', 'minecraft-modern-theme' ),
|
||||||
'_mm_bew_datum' => __( 'Eingereicht am', 'minecraft-modern-theme' ),
|
'_mm_bew_datum' => __( 'Eingereicht am', 'minecraft-modern-theme' ),
|
||||||
@@ -3744,6 +3771,7 @@ function mm_bewerbung_columns( $cols ) {
|
|||||||
'mc_name' => __( 'Minecraft', 'minecraft-modern-theme' ),
|
'mc_name' => __( 'Minecraft', 'minecraft-modern-theme' ),
|
||||||
'discord' => __( 'Discord', 'minecraft-modern-theme' ),
|
'discord' => __( 'Discord', 'minecraft-modern-theme' ),
|
||||||
'alter' => __( 'Alter', 'minecraft-modern-theme' ),
|
'alter' => __( 'Alter', 'minecraft-modern-theme' ),
|
||||||
|
'position' => __( 'Position', 'minecraft-modern-theme' ),
|
||||||
'status' => __( 'Status', 'minecraft-modern-theme' ),
|
'status' => __( 'Status', 'minecraft-modern-theme' ),
|
||||||
'datum' => __( 'Eingereicht', 'minecraft-modern-theme' ),
|
'datum' => __( 'Eingereicht', 'minecraft-modern-theme' ),
|
||||||
);
|
);
|
||||||
@@ -3778,6 +3806,15 @@ function mm_bewerbung_column_content( $col, $post_id ) {
|
|||||||
case 'alter':
|
case 'alter':
|
||||||
echo esc_html( get_post_meta($post_id, '_mm_bew_alter', true) );
|
echo esc_html( get_post_meta($post_id, '_mm_bew_alter', true) );
|
||||||
break;
|
break;
|
||||||
|
case 'position':
|
||||||
|
$pos = get_post_meta($post_id, '_mm_bew_position', true);
|
||||||
|
if ( $pos ) {
|
||||||
|
echo '<span style="background:#1e3a5f;color:#58a6ff;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:600;">'
|
||||||
|
. esc_html($pos) . '</span>';
|
||||||
|
} else {
|
||||||
|
echo '<span style="color:#999;">—</span>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'status':
|
case 'status':
|
||||||
$s = get_post_meta($post_id, '_mm_bew_status', true) ?: 'neu';
|
$s = get_post_meta($post_id, '_mm_bew_status', true) ?: 'neu';
|
||||||
$color = isset($status_colors[$s]) ? $status_colors[$s] : '#0073aa';
|
$color = isset($status_colors[$s]) ? $status_colors[$s] : '#0073aa';
|
||||||
@@ -3809,10 +3846,16 @@ function mm_submit_bewerbung() {
|
|||||||
$warum = sanitize_textarea_field( $_POST['warum'] ?? '' );
|
$warum = sanitize_textarea_field( $_POST['warum'] ?? '' );
|
||||||
$erfahrung = sanitize_textarea_field( $_POST['erfahrung'] ?? '' );
|
$erfahrung = sanitize_textarea_field( $_POST['erfahrung'] ?? '' );
|
||||||
|
|
||||||
|
$position = sanitize_text_field( $_POST['position'] ?? '' );
|
||||||
|
$positionen = mm_bewerbung_get_positionen();
|
||||||
|
|
||||||
$errors = array();
|
$errors = array();
|
||||||
if ( empty($mc_name) ) $errors[] = __('Minecraft Username ist erforderlich.', 'minecraft-modern-theme');
|
if ( empty($mc_name) ) $errors[] = __('Minecraft Username ist erforderlich.', 'minecraft-modern-theme');
|
||||||
if ( empty($discord) ) $errors[] = __('Discord Username ist erforderlich.', 'minecraft-modern-theme');
|
if ( empty($discord) ) $errors[] = __('Discord Username ist erforderlich.', 'minecraft-modern-theme');
|
||||||
if ( $alter_raw < 1 ) $errors[] = __('Bitte gib dein Alter an.', 'minecraft-modern-theme');
|
if ( $alter_raw < 1 ) $errors[] = __('Bitte gib dein Alter an.', 'minecraft-modern-theme');
|
||||||
|
if ( ! empty($positionen) && ! in_array($position, $positionen, true) ) {
|
||||||
|
$errors[] = __('Bitte wähle eine gültige Position aus.', 'minecraft-modern-theme');
|
||||||
|
}
|
||||||
if ( empty($warum) ) $errors[] = __('Bitte erkläre warum du mitspielen möchtest.', 'minecraft-modern-theme');
|
if ( empty($warum) ) $errors[] = __('Bitte erkläre warum du mitspielen möchtest.', 'minecraft-modern-theme');
|
||||||
if ( empty($erfahrung) ) $errors[] = __('Bitte stell dich kurz vor.', 'minecraft-modern-theme');
|
if ( empty($erfahrung) ) $errors[] = __('Bitte stell dich kurz vor.', 'minecraft-modern-theme');
|
||||||
|
|
||||||
@@ -3856,6 +3899,7 @@ function mm_submit_bewerbung() {
|
|||||||
update_post_meta( $post_id, '_mm_bew_mc_name', $mc_name );
|
update_post_meta( $post_id, '_mm_bew_mc_name', $mc_name );
|
||||||
update_post_meta( $post_id, '_mm_bew_discord', $discord );
|
update_post_meta( $post_id, '_mm_bew_discord', $discord );
|
||||||
update_post_meta( $post_id, '_mm_bew_alter', $alter_raw );
|
update_post_meta( $post_id, '_mm_bew_alter', $alter_raw );
|
||||||
|
update_post_meta( $post_id, '_mm_bew_position', $position );
|
||||||
update_post_meta( $post_id, '_mm_bew_warum', $warum );
|
update_post_meta( $post_id, '_mm_bew_warum', $warum );
|
||||||
update_post_meta( $post_id, '_mm_bew_erfahrung', $erfahrung );
|
update_post_meta( $post_id, '_mm_bew_erfahrung', $erfahrung );
|
||||||
update_post_meta( $post_id, '_mm_bew_status', 'neu' );
|
update_post_meta( $post_id, '_mm_bew_status', 'neu' );
|
||||||
|
|||||||
@@ -84,6 +84,32 @@
|
|||||||
|
|
||||||
</div><!-- .bew-grid -->
|
</div><!-- .bew-grid -->
|
||||||
|
|
||||||
|
<!-- Bewirbt sich als -->
|
||||||
|
<?php
|
||||||
|
$positionen = mm_bewerbung_get_positionen();
|
||||||
|
if ( ! empty( $positionen ) ) :
|
||||||
|
?>
|
||||||
|
<div class="bew-field">
|
||||||
|
<label class="bew-label">
|
||||||
|
<i class="fas fa-briefcase"></i>
|
||||||
|
<?php _e('Bewirbt sich als', 'minecraft-modern-theme'); ?>
|
||||||
|
<span class="bew-required">*</span>
|
||||||
|
</label>
|
||||||
|
<div class="bew-position-grid">
|
||||||
|
<?php foreach ( $positionen as $pos ) : ?>
|
||||||
|
<label class="bew-position-card">
|
||||||
|
<input type="radio" name="position" value="<?php echo esc_attr( $pos ); ?>" required>
|
||||||
|
<span class="bew-position-label">
|
||||||
|
<i class="fas fa-shield-alt"></i>
|
||||||
|
<?php echo esc_html( $pos ); ?>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<p class="bew-hint"><?php _e('Wähle die Position für die du dich bewirbst.', 'minecraft-modern-theme'); ?></p>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<!-- Warum mitspielen -->
|
<!-- Warum mitspielen -->
|
||||||
<div class="bew-field">
|
<div class="bew-field">
|
||||||
<label for="bew_warum" class="bew-label">
|
<label for="bew_warum" class="bew-label">
|
||||||
@@ -199,9 +225,11 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
var data = new FormData();
|
var data = new FormData();
|
||||||
data.append('action', 'mm_submit_bewerbung');
|
data.append('action', 'mm_submit_bewerbung');
|
||||||
data.append('nonce', nonce.value);
|
data.append('nonce', nonce.value);
|
||||||
|
var positionEl = document.querySelector('input[name="position"]:checked');
|
||||||
data.append('mc_name', document.getElementById('bew_mc_name').value.trim());
|
data.append('mc_name', document.getElementById('bew_mc_name').value.trim());
|
||||||
data.append('discord', document.getElementById('bew_discord').value.trim());
|
data.append('discord', document.getElementById('bew_discord').value.trim());
|
||||||
data.append('alter', document.getElementById('bew_alter').value.trim());
|
data.append('alter', document.getElementById('bew_alter').value.trim());
|
||||||
|
data.append('position', positionEl ? positionEl.value : '');
|
||||||
data.append('warum', document.getElementById('bew_warum').value.trim());
|
data.append('warum', document.getElementById('bew_warum').value.trim());
|
||||||
data.append('erfahrung', document.getElementById('bew_erfahrung').value.trim());
|
data.append('erfahrung', document.getElementById('bew_erfahrung').value.trim());
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Theme URI: https://git.viper.ipv64.net/M_Viper/Minecraft-Modern-Theme
|
|||||||
Author: M_Viper
|
Author: M_Viper
|
||||||
Description: Ein modernes Gaming-Theme mit konfigurierbarem Header-Slider.
|
Description: Ein modernes Gaming-Theme mit konfigurierbarem Header-Slider.
|
||||||
Author URI: https://M-Viper.de
|
Author URI: https://M-Viper.de
|
||||||
Version: 2.2
|
Version: 2.3
|
||||||
License: GNU General Public License v2 or later
|
License: GNU General Public License v2 or later
|
||||||
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
Text Domain: minecraft-modern-theme
|
Text Domain: minecraft-modern-theme
|
||||||
@@ -4713,3 +4713,128 @@ html.light-mode .bew-mc-avatar { background: #f0f0f0; }
|
|||||||
.bew-grid { grid-template-columns: 1fr; }
|
.bew-grid { grid-template-columns: 1fr; }
|
||||||
.bewerbung-container .page-title { font-size: 1.8rem; }
|
.bewerbung-container .page-title { font-size: 1.8rem; }
|
||||||
}
|
}
|
||||||
|
/* ── Bewerbungs-Positionen ── */
|
||||||
|
.bew-position-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
||||||
|
gap: 12px;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-card {
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-card input[type="radio"] {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-label {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 16px 12px;
|
||||||
|
border: 2px solid var(--border-color, #30363d);
|
||||||
|
border-radius: 10px;
|
||||||
|
background: var(--card-bg, #161b22);
|
||||||
|
color: var(--text-color, #c9d1d9);
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
transition: border-color 0.2s, background 0.2s, color 0.2s, box-shadow 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-label i {
|
||||||
|
font-size: 22px;
|
||||||
|
color: var(--primary-accent, #00d4e8);
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-card:hover .bew-position-label {
|
||||||
|
border-color: var(--primary-accent, #00d4e8);
|
||||||
|
background: rgba(0, 212, 232, 0.07);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-card input[type="radio"]:checked + .bew-position-label {
|
||||||
|
border-color: var(--primary-accent, #00d4e8);
|
||||||
|
background: rgba(0, 212, 232, 0.12);
|
||||||
|
color: var(--primary-accent, #00d4e8);
|
||||||
|
box-shadow: 0 0 0 3px rgba(0, 212, 232, 0.18), 0 4px 16px rgba(0, 212, 232, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bew-position-card input[type="radio"]:checked + .bew-position-label i {
|
||||||
|
transform: scale(1.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Light Mode */
|
||||||
|
html.light-mode .bew-position-label {
|
||||||
|
background: #f4f4f4;
|
||||||
|
border-color: #ddd;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
html.light-mode .bew-position-card input[type="radio"]:checked + .bew-position-label {
|
||||||
|
background: rgba(0, 212, 232, 0.1);
|
||||||
|
color: #007a8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive */
|
||||||
|
@media (max-width: 500px) {
|
||||||
|
.bew-position-grid {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ══════════════════════════════════════════════════════════════
|
||||||
|
FIX: Dropdown-Sichtbarkeit im Centered-Layout (Logo oben, Menü darunter)
|
||||||
|
Das .header-row-nav muss overflow:visible haben damit das Sub-Menu
|
||||||
|
sichtbar aus dem Header herausragen kann.
|
||||||
|
══════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
/* Zeilen-Container darf das Dropdown nicht abschneiden */
|
||||||
|
.site-header--centered,
|
||||||
|
.site-header--centered .container,
|
||||||
|
.site-header--classic,
|
||||||
|
.site-header--classic .container,
|
||||||
|
.header-row-nav,
|
||||||
|
.header-centered-nav {
|
||||||
|
overflow: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nav-Zeile braucht position:relative als Ankerpunkt für das Dropdown */
|
||||||
|
.header-row-nav {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Jedes Menü-Item ist der Ankerpunkt für sein Sub-Menu */
|
||||||
|
.header-row-nav .menu-item-has-children,
|
||||||
|
.header-centered-nav .menu-item-has-children,
|
||||||
|
.site-header--centered .menu-item-has-children,
|
||||||
|
.site-header--classic .menu-item-has-children {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sub-Menu öffnet sich direkt unterhalb des Menüpunkts */
|
||||||
|
.header-row-nav .sub-menu,
|
||||||
|
.header-centered-nav .sub-menu,
|
||||||
|
.site-header--centered .sub-menu,
|
||||||
|
.site-header--classic .sub-menu {
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
z-index: 99999;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover-State: Dropdown einblenden */
|
||||||
|
.header-row-nav .menu-item-has-children:hover > .sub-menu,
|
||||||
|
.header-centered-nav .menu-item-has-children:hover > .sub-menu,
|
||||||
|
.site-header--centered .menu-item-has-children:hover > .sub-menu,
|
||||||
|
.site-header--classic .menu-item-has-children:hover > .sub-menu {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
transform: translateY(10px);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user