admin管理员组文章数量:1122832
I created a custom class for updating my custom theme. It has been working well for several months but the usual WordPress messages during upgrade get cut off when any upgrade process is running.
The image shows where the messages stop.
Here's my class:
<?php defined( 'ABSPATH' ) || exit;
/**
* THEME UPDATER
*
* @package WordPress
* @since ToongeePrime Theme 1.0.55
*
*/
class Prime2gThemeUpdater {
public
$theme,
$slug = PRIME2G_TEXTDOM,
$current_version;
protected
$transient_name = 'prime_transient_update_theme',
$metadataUrl = '.json';
public function __construct() {
if ( defined( 'PRIMETHEMEUPDATER' ) ) return;
define( 'PRIMETHEMEUPDATER', true );
$this->theme = wp_get_theme( $this->slug );
$this->current_version = $this->theme->get( 'Version' );
$this->maybe_clear_transients();
$this->set_this_theme_transient();
$this->admin_notices();
add_filter( 'pre_set_site_transient_update_themes', [ $this,'set_theme_status_response' ] );
add_filter( 'site_transient_update_themes', [ $this,'set_update_notice' ] );
$this->upgrade_processing();
add_action( 'deleted_site_transient', [ $this, 'delete_transient_if' ], 10, 1 );
}
private function update_available() {
$update_data = get_site_transient( $this->transient_name );
if ( ! $update_data || isset( $update_data->error ) && $update_data->error === true )
return false;
return version_compare( $this->current_version, $update_data->version, '<' );
}
/**
* Retrieve update info from metadata URL
*/
private function get_remote_data() {
$remote = wp_remote_get(
$this->metadataUrl,
array(
'timeout' => 10,
'headers' => [ 'Accept' => 'application/json' ]
)
);
$remote_body = wp_remote_retrieve_body( $remote );
if ( is_wp_error( $remote ) || 200 !== wp_remote_retrieve_response_code( $remote )
|| empty( $remote_body ) ) {
return (object) [ 'error' => true, 'message' => 'Failed remote request' ];
}
return json_decode( $remote_body );
}
/**
* Establish workings within this class
*/
private function set_this_theme_transient() {
if ( $remote_to_transient = get_site_transient( $this->transient_name ) ) {
return $remote_to_transient;
}
else {
$remote_to_transient = $this->get_remote_data();
if ( isset( $remote_to_transient->error )
&& $remote_to_transient->error === true ) return;
set_site_transient( $this->transient_name, $remote_to_transient, DAY_IN_SECONDS );
return $remote_to_transient;
}
}
private function transient_item_data() {
$remote_in_transient = get_site_transient( $this->transient_name );
if ( ! $remote_in_transient ) {
return [
'theme' => $this->slug,
'new_version' => $this->current_version,
'url' => '',
'package' => '',
'requires' => '',
'requires_php' => ''
];
}
return array(
'theme' => $this->slug,
'new_version' => $this->update_available() ? $remote_in_transient->version : $this->current_version,
'url' => $remote_in_transient->details_url,
'package' => $remote_in_transient->download_url,
'requires' => $remote_in_transient->requires,
'requires_php' => $remote_in_transient->requires_php
);
}
private function update_qualified() {
$remote_in_transient = get_site_transient( $this->transient_name );
return version_compare( $remote_in_transient->requires, get_bloginfo( 'version' ), '<=' )
&& version_compare( $remote_in_transient->requires_php, PHP_VERSION, '<=' );
}
/**
* Callback @ pre_set_site_transient_update_themes
*/
function set_theme_status_response( $transient ) {
$item_data = $this->transient_item_data();
if ( $this->update_available() && $this->update_qualified() ) {
$transient->response[ $this->slug ] = $item_data;
}
else {
$transient->no_update[ $this->slug ]= $item_data;
}
return $transient;
}
/**
* Callback @ site_transient_update_themes
*/
function set_update_notice( $transient ) {
if ( is_object( $transient ) ) {
$transient = $this->set_theme_status_response( $transient );
}
else {
// Fix for warning messages on Dashboard / Updates page
$transient = new stdClass();
$item_data = $this->transient_item_data();
$transient->response = $transient->no_update = [];
$transient->response[ $this->slug ] = $item_data;
$transient->no_update[ $this->slug ] = $item_data;
}
return $transient;
}
function upgrade_processing() {
if ( wp_doing_ajax() || ! is_admin() || ! current_user_can( 'update_themes' ) ) return;
// inspired by ET_Core_Updates->remove_theme_update_actions()
add_action( 'after_setup_theme', function() {
remove_filter( 'pre_set_site_transient_update_themes', [ $this, 'set_theme_status_response' ] );
remove_filter( 'site_transient_update_themes', [ $this, 'set_update_notice' ] );
}, 11 );
add_action( 'upgrader_process_complete', function( $upgrader_object, $options ) {
if ( $options['action'] === 'update'
&& $options['type'] === 'theme' && isset( $options['themes'] ) ) {
foreach( $options['themes'] as $theme ) {
if ( $theme === $this->slug ) { set_site_transient( 'p2gtheme_updated', 1 ); }
}
}
}, 10, 2 );
}
private function admin_notices() {
add_action( 'admin_notices', function() {
global $pagenow;
if ( $this->update_available() && ! in_array( $pagenow, [ 'update-core.php', 'themes.php' ] ) && current_user_can( 'edit_others_posts' ) ) {
echo '<div class="notice notice-warning notice-alt is-dismissible">
<p>'. __( 'New ToongeePrime Theme Update is available, please update now ', $this->slug ) .'
<a href="'. admin_url( 'update-core.php?prime-update=theme' ) .'" title="Update the theme here">'. __( 'here', $this->slug ) .'</a>!
</p></div>';
}
if ( get_site_transient( 'p2gtheme_updated' ) ) {
echo '<div class="notice notice-success notice-alt is-dismissible"><p>'
. __( 'Thanks for updating the Theme, ToongeePrime!', $this->slug ) .
'</p></div>';
delete_site_transient( 'p2gtheme_updated' );
}
} );
}
private function maybe_clear_transients() {
if ( wp_doing_ajax() ) return;
if ( is_admin() && current_user_can( 'update_themes' ) && isset( $_GET[ 'prime-update' ] ) ) {
$action = $_GET[ 'prime-update' ];
if ( in_array( $action, [ 'clear-caches', 'clear-transients' ] ) ) {
if ( get_site_transient( $this->transient_name ) ) {
$deleted = delete_site_transient( $this->transient_name );
wp_clean_themes_cache();
if ( $deleted ) {
add_action( 'admin_notices', function() {
echo '<div class="notice notice-warning notice-alt is-dismissible">
<p>'. __( 'Themes updates transients have been cleared!', $this->slug ) .'</p></div>';
} );
}
}
}
if ( $action === 'theme' ) {
add_action( 'admin_notices', function() {
echo '<div class="notice notice-warning notice-alt is-dismissible">
<p>'. __( 'To Clear transients and Re-check update availability, ', $this->slug ) .'
<a href="'. admin_url( 'update-core.php?prime-update=clear-caches' ) .'" title="Check again">'. __( 'click here', $this->slug ) .'</a>.
</p></div>';
} );
}
}
}
function delete_transient_if( $deleted_transient ) {
if ( $deleted_transient === 'update_themes' )
delete_site_transient( $this->transient_name );
}
}
/**
* ACTIVATE
*/
if ( ! function_exists( 'prime2g_theme_updater' ) ) {
add_action( 'admin_init', 'prime2g_theme_updater' );
function prime2g_theme_updater() {
new Prime2gThemeUpdater();
}
}
All is well asides the messages being cut off... and that's what I need help about.
本文标签: WP Update Messages get cut off during Theme update
版权声明:本文标题:WP Update Messages get cut off during Theme update 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736308367a1933636.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论