WordPress Autoload bereinigen

zuletzt aktualisiert vor 20 Sekunden

Das Problem: Zu viele autoloaded Options

WordPress lädt bei jedem Seitenaufruf alle Options mit autoload='yes' aus der Datenbank. Bei 546 autoloaded Options mit 960 KB Gesamtgröße wird jeder Request unnötig verlangsamt.

Achtung: WordPress bereinigt keine Autoload-Optionen von selbst – das heißt, man muss das selbst tun!

Hier zeige ich auf, wie man das Problem löst.

Analyse durchführen

MySQL-Credentials automatisch extrahieren

# SSH-Verbindung
ssh user@server

# Zum WordPress-Verzeichnis
cd /home/domain.com/public_html

# Credentials aus wp-config.php extrahieren
DB_NAME=$(grep DB_NAME wp-config.php | cut -d "'" -f 4)
DB_USER=$(grep DB_USER wp-config.php | cut -d "'" -f 4)
DB_PASS=$(grep DB_PASSWORD wp-config.php | cut -d "'" -f 4)
DB_HOST=$(grep DB_HOST wp-config.php | cut -d "'" -f 4 | cut -d':' -f1)
PREFIX=$(grep table_prefix wp-config.php | cut -d "'" -f 2)

Status prüfen

mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e "
SELECT 
  COUNT(*) as 'Anzahl Options',
  ROUND(SUM(LENGTH(option_value))/1024,2) as 'Größe (KB)'
FROM ${PREFIX}options 
WHERE autoload='yes';"

Bereinigung durchführen

1. Backup erstellen (kritisch!)

mysqldump -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME ${PREFIX}options > \
  /tmp/options_backup_$(date +%Y%m%d_%H%M%S).sql

2. Transients bereinigen

Transients sollten niemals autoloaded sein:

mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e "
UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name LIKE '%_transient_%' AND autoload='yes';

DELETE FROM ${PREFIX}options 
WHERE option_name LIKE '%_transient_timeout_%' 
AND option_value < UNIX_TIMESTAMP();"

3. Plugin-spezifische Bereinigung

mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME << EOF
-- Logs und Debug-Daten
UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name LIKE '%_log%' OR option_name LIKE '%_debug_%';

-- Cache-Einträge
UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name LIKE '%_cache_%';

-- Elementor Assets (werden bei Bedarf regeneriert)
UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name IN ('_elementor_assets_data', 'elementor-custom-breakpoints-files');

-- WooCommerce Payment Gateways (nur beim Checkout benötigt)
UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name LIKE 'woocommerce_stripe_%_settings' 
   OR option_name LIKE 'woocommerce_fkwcs_%';

-- Cron (kann auf 'no')
UPDATE ${PREFIX}options SET autoload='no' WHERE option_name = 'cron';
EOF

4. Leere Options deaktivieren

mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e "
UPDATE ${PREFIX}options SET autoload='no' 
WHERE autoload='yes' 
AND LENGTH(option_value) = 0 
AND option_name NOT IN ('WPLANG','upload_path','category_base','tag_base');"

Automatische Wartung einrichten

Wartungsscript erstellen

# Scripts-Verzeichnis außerhalb des Web-Roots
mkdir -p /home/domain.com/scripts
chmod 750 /home/domain.com/scripts

cat > /home/domain.com/scripts/autoload_maintenance.sh << 'EOF'
#!/bin/bash
WP_PATH="/home/domain.com/public_html"
cd $WP_PATH

# DB Credentials extrahieren
DB_NAME=$(grep DB_NAME wp-config.php | cut -d "'" -f 4)
DB_USER=$(grep DB_USER wp-config.php | cut -d "'" -f 4)
DB_PASS=$(grep DB_PASSWORD wp-config.php | cut -d "'" -f 4)
DB_HOST=$(grep DB_HOST wp-config.php | cut -d "'" -f 4 | cut -d':' -f1)
PREFIX=$(grep table_prefix wp-config.php | cut -d "'" -f 2)

# Bereinigung
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME -e "
DELETE FROM ${PREFIX}options 
WHERE option_name LIKE '%_transient_%' AND autoload='yes';

UPDATE ${PREFIX}options SET autoload='no' 
WHERE option_name LIKE '%_log%' AND autoload='yes';"

# Cache leeren
rm -rf $WP_PATH/wp-content/cache/*
rm -rf $WP_PATH/wp-content/litespeed/*
EOF

chmod +x /home/domain.com/scripts/autoload_maintenance.sh

Cron-Job einrichten

# Wöchentliche Ausführung
(crontab -l 2>/dev/null; echo "0 4 * * 0 /home/domain.com/scripts/autoload_maintenance.sh") | crontab -

Ergebnisse

In meinem Praxistest konnte ich die autoloaded Options von:

  • 546 Options (960 KB) auf
  • 208 Options (3.07 KB) reduzieren

Das entspricht einer 98% Reduktion der Datenmenge.

Wichtige Hinweise

Sicherheit

  • Scripts niemals im public_html-Verzeichnis speichern
  • Immer Backup vor Änderungen erstellen
  • Bei Fehlern: mysql -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME < /tmp/options_backup_*.sql

Kompatibilität

  • Getestet mit CyberPanel/OpenLiteSpeed
  • WordPress 6.x kompatibel
  • WooCommerce-spezifische Optimierungen enthalten

Performance-Benchmark

# Ladezeit vor/nach Optimierung testen
for i in {1..5}; do
  curl -o /dev/null -s -w "Test $i: %{time_total}s\n" https://domain.com
done

Empfohlene Grenzwerte

  • Optimal: < 100 autoloaded options, < 100 KB
  • Akzeptabel: < 200 options, < 800 KB
  • Problematisch: > 300 options oder > 1 MB

Mit 3 KB autoloaded data ist die Performance-Optimierung maximal – weniger Options bedeuten weniger PHP-Array-Verarbeitung bei jedem WordPress-Request.

Inhalte

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    lk media – Dein Partner für Online Marketing & Webdesign.

    Dein Erfolg im Netz ist unser Antrieb.
    lkmedia weiss
    Agentur für zukunftsweisendes Online Marketing und Webdesign. Wir sind ein Team aus kreativen Köpfen und strategischen Denkern, das sich mit Leidenschaft deinem Erfolg im digitalen Raum verschrieben hat. Unser Ziel ist es, deine Marke optimal zu präsentieren, deine Zielgruppe zu erreichen und nachhaltiges Wachstum zu generieren.
    de_DEDeutsch