wp-config.php Optimierungen

// Debug
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', false );

// Revision-Limit – spart Datenbankplatz
define( 'WP_POST_REVISIONS', 5 );

// Datenbankbereinigung automatisch durchführen
define( 'EMPTY_TRASH_DAYS', 14 );

// Autosave-Intervall erhöhen (Standard: 60 Sek.)
define( 'AUTOSAVE_INTERVAL', 120 );

//PHP-Memory
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

functions.php

<?php
/**
 * Engelhardt Medien – Astra Child Theme
 * functions.php
 *
 * Optimiert für: Performance, Sicherheit, Kompatibilität
 * Kompatibel mit: Astra Pro, Gutenberg, WPML, WP Fastest Cache,
 *                 Autoptimize, Contact Form 7, Yoast SEO
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 * @package Astra Child
 * @since 1.0.0
 */

defined( 'ABSPATH' ) || exit;
define( 'CHILD_THEME_ASTRA_CHILD_VERSION', '1.0.0' );

/* =============================================================================
   1. CHILD THEME SETUP – Stylesheet einbinden
   Child-CSS mit Abhängigkeit auf Astra-Parent-CSS laden
   ============================================================================= */

add_action( 'wp_enqueue_scripts', 'em_child_enqueue_styles', 15 );
function em_child_enqueue_styles() {
    wp_enqueue_style(
        'astra-child-theme-css',
        get_stylesheet_directory_uri() . '/style.css',
        array( 'astra-theme-css' ),
        CHILD_THEME_ASTRA_CHILD_VERSION,
        'all'
    );
}

/* =============================================================================
   2. ASTRA – FONT DISPLAY SWAP
   ============================================================================= */

add_filter( 'astra_fonts_display_property', 'em_astra_font_display_swap' );
function em_astra_font_display_swap( $property ) {
    return 'swap';
}

/* =============================================================================
   3. PERFORMANCE – HEAD AUFRÄUMEN
   Entfernt unnötige WordPress-Ausgaben im <head>
   ============================================================================= */

// Emojis komplett deaktivieren
remove_action( 'wp_head',             'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles',     'print_emoji_styles' );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles',  'print_emoji_styles' );
add_filter( 'emoji_svg_url', '__return_false' );

// Weitere unnötige Head-Ausgaben
remove_action( 'wp_head', 'rsd_link' );                               // Really Simple Discovery
remove_action( 'wp_head', 'wlwmanifest_link' );                       // Windows Live Writer
remove_action( 'wp_head', 'wp_generator' );                           // WordPress-Version verstecken
remove_action( 'wp_head', 'wp_shortlink_wp_head' );                   // Shortlink
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 );    // Prev/Next-Links
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );      // oEmbed-Discovery

// REST-API-Header aus dem <head> entfernen (API selbst bleibt vollständig aktiv)
remove_action( 'wp_head',           'rest_output_link_wp_head', 10 );
remove_action( 'template_redirect', 'rest_output_link_header',  11 );

/* =============================================================================
   4. PERFORMANCE – DASHICONS
   Nur für eingeloggte Nutzer laden
   ============================================================================= */

add_action( 'wp_enqueue_scripts', 'em_dequeue_dashicons', 100 );
function em_dequeue_dashicons() {
    if ( ! is_user_logged_in() ) {
        wp_deregister_style( 'dashicons' );
    }
}

/* =============================================================================
   5. PERFORMANCE – HEARTBEAT API
   Interval erhöhen reduziert Admin-AJAX-Last im Frontend
   ============================================================================= */

add_filter( 'heartbeat_settings', 'em_heartbeat_settings' );
function em_heartbeat_settings( $settings ) {
    $settings['interval'] = 60; // Standard: 15 Sek. → 60 Sek.
    return $settings;
}

add_action( 'init', 'em_disable_heartbeat_frontend', 1 );
function em_disable_heartbeat_frontend() {
    if ( ! is_admin() ) {
        wp_deregister_script( 'heartbeat' );
    }
}

/* =============================================================================
   6. SICHERHEIT
   ============================================================================= */

// WordPress-Version aus allen Ausgaben entfernen
add_filter( 'the_generator', '__return_empty_string' );

// Versionsparameter von Skripten/Styles entfernen (?ver=x.x.x)
add_filter( 'style_loader_src',  'em_remove_version_strings', 9999 );
add_filter( 'script_loader_src', 'em_remove_version_strings', 9999 );
function em_remove_version_strings( $src ) {
    if ( strpos( $src, 'ver=' ) ) {
        $src = remove_query_arg( 'ver', $src );
    }
    return $src;
}

// Login-Fehlermeldungen generisch halten (verhindert Nutzernamen-Enumeration)
add_filter( 'login_errors', 'em_obscure_login_errors' );
function em_obscure_login_errors() {
    return __( 'Ungültige Anmeldedaten.', 'engelhardt-medien-child' );
}

// Autor-Enum über ?author=1 verhindern (Nutzernamen-Leak via Redirect)
add_action( 'template_redirect', 'em_block_author_enum' );
function em_block_author_enum() {
    if ( ! is_admin() && isset( $_GET['author'] ) ) {
        wp_die( 'Nicht erlaubt.', 403 );
    }
}

/* =============================================================================
   7. KOMPATIBILITÄT & STABILITÄT
   ============================================================================= */

// Überflüssige Zwischenbildgröße "medium_large" (768px) deaktivieren
add_filter( 'intermediate_image_sizes_advanced', 'em_remove_image_sizes' );
function em_remove_image_sizes( $sizes ) {
    unset( $sizes['medium_large'] );
    return $sizes;
}
Nach oben scrollen