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;
}