Minecraft-Modern-Theme/inc/theme-updater.php aktualisiert

This commit is contained in:
2026-01-09 21:55:21 +00:00
parent 39f1d87475
commit c7e8703787

View File

@@ -6,40 +6,62 @@ if ( ! defined( 'ABSPATH' ) ) {
} }
// === ZENTRALE VERSIONSKONSTANTE === // === ZENTRALE VERSIONSKONSTANTE ===
// Bitte passen Sie diese Version bei jedem Release an!
define( 'MINECRAFT_MODERN_THEME_VERSION', '1.6' ); define( 'MINECRAFT_MODERN_THEME_VERSION', '1.6' );
// === THEME UPDATE NOTIFICATION SYSTEM === // === THEME UPDATE NOTIFICATION SYSTEM ===
// Funktion zum Abrufen der neuesten Release-Informationen vom Git-Repository // Funktion zum Leeren des Caches (wenn man auf "Update prüfen" klickt)
function minecraft_modern_get_latest_release_info() { function minecraft_modern_clear_cache() {
if ( isset( $_GET['mm_clear_cache'] ) && current_user_can( 'manage_options' ) ) {
check_admin_referer( 'mm_clear_cache_action' );
delete_transient( 'minecraft_modern_latest_release' );
wp_redirect( admin_url( 'index.php' ) );
exit;
}
}
add_action( 'admin_init', 'minecraft_modern_clear_cache' );
// Funktion zum Abrufen der neuesten Release-Informationen
function minecraft_modern_get_latest_release_info( $force_refresh = false ) {
$transient_key = 'minecraft_modern_latest_release'; $transient_key = 'minecraft_modern_latest_release';
// Versuche, die Daten aus dem Transient-Cache zu holen // Wenn erzwungen wird (oder Cache leer), frische Daten holen
if ( $force_refresh ) {
delete_transient( $transient_key );
}
$release_info = get_transient( $transient_key ); $release_info = get_transient( $transient_key );
// Wenn der Cache leer oder abgelaufen ist, rufe neue Daten ab
if ( false === $release_info ) { if ( false === $release_info ) {
$response = wp_remote_get('https://git.viper.ipv64.net/api/v1/repos/M_Viper/Minecraft-Modern-Theme/releases/latest'); // Timeout auf 10 Sekunden erhöht für langsame Verbindungen
$response = wp_remote_get( 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/Minecraft-Modern-Theme/releases/latest', array( 'timeout' => 10 ) );
if ( ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response ) ) { if ( ! is_wp_error( $response ) && 200 === wp_remote_retrieve_response_code( $response ) ) {
$body = wp_remote_retrieve_body( $response ); $body = wp_remote_retrieve_body( $response );
$release_data = json_decode( $body, true ); $release_data = json_decode( $body, true );
if ( $release_data && isset( $release_data['tag_name'] ) ) { if ( $release_data && isset( $release_data['tag_name'] ) ) {
// Tag bereinigen (falls 'v' davor steht, z.B. v1.6 -> 1.6)
$tag_name = $release_data['tag_name'];
if ( strpos( $tag_name, 'v' ) === 0 ) {
$tag_name = ltrim( $tag_name, 'v' );
}
$release_info = array( $release_info = array(
'version' => $release_data['tag_name'], 'version' => $tag_name,
'download_url' => $release_data['zipball_url'], 'download_url' => $release_data['zipball_url'],
'release_notes' => isset( $release_data['body'] ) ? $release_data['body'] : '', 'release_notes' => isset( $release_data['body'] ) ? $release_data['body'] : '',
'published_at' => isset( $release_data['published_at'] ) ? $release_data['published_at'] : '' 'published_at' => isset( $release_data['published_at'] ) ? $release_data['published_at'] : ''
); );
// Speichere die Daten für 12 Stunden im Cache // Cache für 6 Stunden (kannst du anpassen)
set_transient($transient_key, $release_info, 12 * HOUR_IN_SECONDS); set_transient( $transient_key, $release_info, 6 * HOUR_IN_SECONDS );
} else {
// Fehlerhafte Daten leer cachen
set_transient( $transient_key, array(), HOUR_IN_SECONDS );
} }
} else { } else {
// Bei Fehler, leere Daten für 1 Stunde cachen, um wiederholte fehlgeschlagene Anfragen zu vermeiden // Fehler beim Abrufen
set_transient( $transient_key, array(), HOUR_IN_SECONDS ); set_transient( $transient_key, array(), HOUR_IN_SECONDS );
} }
} }
@@ -47,20 +69,15 @@ function minecraft_modern_get_latest_release_info() {
return $release_info; return $release_info;
} }
// Funktion zum Anzeigen der Update-Benachrichtigung im Admin-Bereich // Benachrichtigung im Admin-Bereich
function minecraft_modern_show_update_notification() { function minecraft_modern_show_update_notification() {
// Nur im Admin-Bereich und für Administratoren anzeigen
if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) { if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
return; return;
} }
// Aktuelle Theme-Version abrufen (JETZT AUS UNSERER KONSTANTE)
$current_version = MINECRAFT_MODERN_THEME_VERSION; $current_version = MINECRAFT_MODERN_THEME_VERSION;
// Neueste Release-Informationen abrufen
$latest_release = minecraft_modern_get_latest_release_info(); $latest_release = minecraft_modern_get_latest_release_info();
// Wenn wir gültige Release-Informationen haben und die Versionen unterschiedlich sind
if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) && version_compare( $current_version, $latest_release['version'], '<' ) ) { if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) && version_compare( $current_version, $latest_release['version'], '<' ) ) {
?> ?>
<div class="notice notice-warning is-dismissible"> <div class="notice notice-warning is-dismissible">
@@ -88,38 +105,38 @@ function minecraft_modern_show_update_notification() {
} }
add_action( 'admin_notices', 'minecraft_modern_show_update_notification' ); add_action( 'admin_notices', 'minecraft_modern_show_update_notification' );
// Funktion zum Hinzufügen eines Update-Status-Widgets zum Dashboard // Dashboard Widget
function minecraft_modern_add_dashboard_widget() { function minecraft_modern_add_dashboard_widget() {
wp_add_dashboard_widget( wp_add_dashboard_widget(
'minecraft_modern_update_widget', // Widget slug. 'minecraft_modern_update_widget',
'Minecraft Modern Theme Status', // Title. 'Minecraft Modern Theme Status',
'minecraft_modern_update_widget_function' // Display function. 'minecraft_modern_update_widget_function'
); );
} }
add_action( 'wp_dashboard_setup', 'minecraft_modern_add_dashboard_widget' ); add_action( 'wp_dashboard_setup', 'minecraft_modern_add_dashboard_widget' );
// Funktion zum Anzeigen des Inhalts im Dashboard-Widget
function minecraft_modern_update_widget_function() { function minecraft_modern_update_widget_function() {
// Aktuelle Theme-Version abrufen (JETZT AUS UNSERER KONSTANTE)
$current_version = MINECRAFT_MODERN_THEME_VERSION; $current_version = MINECRAFT_MODERN_THEME_VERSION;
// Neueste Release-Informationen abrufen
$latest_release = minecraft_modern_get_latest_release_info(); $latest_release = minecraft_modern_get_latest_release_info();
echo '<p><strong>' . __( 'Current Version:', 'minecraft-modern-theme' ) . '</strong> ' . esc_html( $current_version ) . '</p>'; echo '<p><strong>' . __( 'Current Version:', 'minecraft-modern-theme' ) . '</strong> ' . esc_html( $current_version ) . '</p>';
if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) ) { if ( ! empty( $latest_release ) && isset( $latest_release['version'] ) ) {
echo '<p><strong>' . __( 'Latest Version:', 'minecraft-modern-theme' ) . '</strong> ' . esc_html( $latest_release['version'] ) . '</p>';
if ( version_compare( $current_version, $latest_release['version'], '<' ) ) { if ( version_compare( $current_version, $latest_release['version'], '<' ) ) {
echo '<p><strong>' . __('Latest Version:', 'minecraft-modern-theme') . '</strong> <span style="color: #d63638;">' . esc_html($latest_release['version']) . '</span></p>';
echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> <span style="color: #d63638;">' . __( 'Update Available', 'minecraft-modern-theme' ) . '</span></p>'; echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> <span style="color: #d63638;">' . __( 'Update Available', 'minecraft-modern-theme' ) . '</span></p>';
echo '<p><a href="' . esc_url( $latest_release['download_url'] ) . '" class="button button-primary" target="_blank">' . __( 'Download Update', 'minecraft-modern-theme' ) . '</a></p>'; echo '<p><a href="' . esc_url( $latest_release['download_url'] ) . '" class="button button-primary" target="_blank">' . __( 'Download Update', 'minecraft-modern-theme' ) . '</a></p>';
} else { } else {
echo '<p><strong>' . __('Latest Version:', 'minecraft-modern-theme') . '</strong> <span style="color: #46b450;">' . esc_html($latest_release['version']) . '</span></p>';
echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> <span style="color: #46b450;">' . __( 'Up to Date', 'minecraft-modern-theme' ) . '</span></p>'; echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> <span style="color: #46b450;">' . __( 'Up to Date', 'minecraft-modern-theme' ) . '</span></p>';
} }
} else { } else {
echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> ' . __( 'Unable to check for updates', 'minecraft-modern-theme' ) . '</p>'; echo '<p><strong>' . __( 'Status:', 'minecraft-modern-theme' ) . '</strong> ' . __( 'Unable to check for updates', 'minecraft-modern-theme' ) . '</p>';
} }
// Link für "Jetzt prüfen" hinzugefügt
$refresh_url = wp_nonce_url( admin_url( 'index.php?mm_clear_cache=1' ), 'mm_clear_cache_action' );
echo '<p><a href="' . esc_url( $refresh_url ) . '" onclick="return confirm(\'Cache leeren und neu prüfen?\');">' . __( 'Check for Updates Now', 'minecraft-modern-theme' ) . '</a></p>';
echo '<p><a href="https://git.viper.ipv64.net/M_Viper/Minecraft-Modern-Theme/releases" target="_blank">' . __( 'View All Releases', 'minecraft-modern-theme' ) . '</a></p>'; echo '<p><a href="https://git.viper.ipv64.net/M_Viper/Minecraft-Modern-Theme/releases" target="_blank">' . __( 'View All Releases', 'minecraft-modern-theme' ) . '</a></p>';
} }