Custom theme updater – zufälliger String im neuen Themennamen

Ich mache ein Thema, das über Github aktualisiert werden kann. https://github.com/pallazzio/skeleton

Ich versuche, das Plugin Updater-Tutorial von smashing magazine zu verwenden, das für die Aktualisierung eines Themas modifiziert wurde. https://www.smashingmagazine.com/2015/08/deploy-wordpress-plugins-with-github-using-transients/

Ich habe es fast geschafft. Das Update wird heruntergeladen und im richtigen Ordner installiert. Anstatt jedoch das gleiche Thema aktiv zu lassen, aktiviert es ein neues Thema, dessen Name pallazzio-skeleton-b203a7f lautet.

Der komische Teil ist, dass kein Ordner mit diesem Namen erstellt wurde. Die Dateien werden an der richtigen Stelle installiert. Das Update ist voll funktionsfähig, sobald ich das aktive Theme wieder auf den ursprünglichen Themennamen umschalte.

Die einzige Sache, die ich beenden muss, ist, wie man sicherstellt, dass sich das aktuelle aktive Thema nicht in einen zufälligen Namen ändert. Ich stecke fest.

Jede Hilfe würde sehr geschätzt werden.

Hier ist der relevante Teil in functions.php

// Init theme updater if( ! class_exists( 'Pallazzio_Theme_Updater' ) ){ include_once( 'updater.php' ); } $updater = new Pallazzio_Theme_Updater( 'skeleton' ); $updater->set_username( 'pallazzio' ); $updater->set_repository( 'skeleton' ); //$updater->authorize( 'abcdefghijk1234567890' ); // auth code for private repos $updater->initialize(); 

Hier ist der Inhalt von updater.php

 theme = wp_get_theme( $theme ); return $this; } public function set_username( $username ) { $this->username = $username; } public function set_repository( $repository ) { $this->repository = $repository; } public function authorize( $token ) { $this->authorize_token = $token; } public function initialize() { add_filter( 'pre_set_site_transient_update_themes', array( $this, 'modify_transient' ), 10, 1 ); add_filter( 'upgrader_post_install', array( $this, 'after_install' ), 10, 3 ); } public function modify_transient( $transient ) { if( property_exists( $transient, 'checked') ) { // Check if transient has a checked property if( $checked = $transient->checked ) { // Did WordPress check for updates? $this->get_repository_info(); // Get the repo info $out_of_date = version_compare( $this->github_response['tag_name'], $checked[ $this->theme->template ], 'gt' ); // Check if we're out of date if( $out_of_date ) { $new_files = $this->github_response['zipball_url']; // Get the ZIP $theme = array( // setup our theme info 'theme' => $this->theme->template, 'url' => $this->theme->get( 'ThemeURI' ), 'package' => $new_files, 'new_version' => $this->github_response['tag_name'] ); $transient->response[$this->theme->template] = $theme; // Return it in response } } } return $transient; // Return filtered transient } public function after_install( $response, $hook_extra, $result ) { global $wp_filesystem; // Get global FS object $install_directory = get_template_directory(); // Our theme directory $result['destination_name'] = $this->theme->template; // Set the destination name for the rest of the stack $result['remote_destination'] = $install_directory; // Set the remote destination for the rest of the stack $wp_filesystem->move( $result['destination'], $install_directory ); // Move files to the theme dir $result['destination'] = $install_directory; // Set the destination for the rest of the stack //switch_theme( $this->theme->template ); return $result; } private function get_repository_info() { if ( is_null( $this->github_response ) ) { // Do we have a response? $request_uri = sprintf( 'https://api.github.com/repos/%s/%s/releases', $this->username, $this->repository ); // Build URI if( $this->authorize_token ) { // Is there an access token? $request_uri = add_query_arg( 'access_token', $this->authorize_token, $request_uri ); // Append it } $response = json_decode( wp_remote_retrieve_body( wp_remote_get( $request_uri ) ), true ); // Get JSON and parse it if( is_array( $response ) ) { // If it is an array $response = current( $response ); // Get the first item } if( $this->authorize_token ) { // Is there an access token? $response['zipball_url'] = add_query_arg( 'access_token', $this->authorize_token, $response['zipball_url'] ); // Update our zip url with token } $this->github_response = $response; } } } ?> 

Solutions Collecting From Web of "Custom theme updater – zufälliger String im neuen Themennamen"

Der Themenname bezieht sich nicht auf den Ordner. Der Name des Themas stammt aus den Header-Informationen in der style.css-Datei innerhalb des Themes. Es ist durchaus möglich, dass das heruntergeladene Update ein anderes Thema ist. Das liegt an einer Lücke im Update-System selbst. Das Update wird über den Theme-Slug anstelle des Themennamen überprüft. Stellen Sie sicher, dass das richtige Thema-Slug überprüft wird und das Update-Paket auf dem Server den richtigen Slug- und Theme-Namen hat.

Der ganze process ist zu kompliziert, um in meinem Kopf zu laufen, aber ich kann Ihnen einen Vorschlag geben, was passiert ist. Wie Sie wissen, ist der Themenname in zwei Einträgen in der database gespeichert . Es sieht so aus, als würden diese Einträge in einen temporären Namen geändert, der aus dem tatsächlichen Namen, dem Namen des Repositorys und einer Art transient / nonce besteht. Die Frage ist wo.

Mein Rat versucht dies get_option('template') indem get_option('template') ein paar Mal in Ihrem Code widerspreche. Dies sollte Ihnen helfen herauszufinden, wo der Wechsel stattfindet. Meine wilde Vermutung ist hier:

 $result['destination_name'] = $this->theme->template;