Comment empêcher la redirection vers «À propos» après la mise à niveau principale?

9

Dans wp-admin/includes/update-core.phpnous trouvons la ligne suivante:

add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );

Je souhaite supprimer cette action, j'ai donc créé un plugin mu avec le contenu suivant:

<?php # -*- coding: utf-8 -*-
add_action( '_core_updated_successfully', 't5_no_redirect_after_update', 0 );

function t5_no_redirect_after_update()
{
    remove_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );
}

Ça ne fait rien. Je suis toujours redirigé. Testé avec des installations à site unique et à sites multiples.

Je suppose que je manque quelque chose d'évident, comme d'habitude. :)
Comment faire mieux?

Mise à jour

Sur la base de la réponse de Brady, je construis une version très minimale:

<?php # -*- coding: utf-8 -*-
/* Plugin Name: T5 No redirect after core upgrade. */
add_action( '_core_updated_successfully', 't5_no_redirect_after_update', 0 );

function t5_no_redirect_after_update()
{
    show_message( __('WordPress updated successfully') );

    // Include admin-footer.php and exit
    include(ABSPATH . 'wp-admin/admin-footer.php');

    exit;
}

Nous voyons maintenant le message de réussite et aucune autre action n'est appelée. Vous pouvez télécharger le plugin sur GitHub . Utilisez-le comme plugin standard ou comme plugin MU.

fuxia
la source
L' _core_updated_successfullyaction mentionnée par @Brady semble absente de 3.8. * (> 3.7 ??). Des idées de remplacement aa?
krembo99
@ krembo99 Il est toujours là: /wp-admin/includes/update-core.phpà la fin du fichier.
fuxia
ouais .. mon mauvais. Était à la recherche d'une installation de base personnalisée.
krembo99

Réponses:

6

Ne supprimez pas l'action mais ajoutez la vôtre avant celle-ci. Si vous supprimez l'action, vous n'obtiendrez jamais le message indiquant qu'elle a été correctement mise à niveau. Ici, vous pouvez fournir vos propres informations sur la marche à suivre.

function tp_dont_redirect_to_about_wordpress( $new_version ) {
    global $wp_version, $pagenow, $action;

    if ( version_compare( $wp_version, '3.4-RC1', '>=' ) )
        return;

    // Ensure we only run this on the update-core.php page. wp_update_core() could be called in other contexts.
    if ( 'update-core.php' != $pagenow )
        return;

    if ( 'do-core-upgrade' != $action && 'do-core-reinstall' != $action )
        return;

    // Load the updated default text localization domain for new strings
    load_default_textdomain();

    // See do_core_upgrade()
    show_message( __('WordPress updated successfully') );
    show_message( '<span>' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $new_version, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' );
    echo '</div>';

    // Include admin-footer.php and exit
    include(ABSPATH . 'wp-admin/admin-footer.php');
    exit();
}
add_action( '_core_updated_successfully', 'tp_dont_redirect_to_about_wordpress', 1, 1 );

Je sais que dans le chat, vous avez montré que vous aviez du mal à supprimer l'action, j'ai donc cherché une solution qui ne supprime pas l'action mais en ajoute une avant.

Le code ci-dessus est une copie de la fonction principale à laquelle il s'accroche _core_updated_successfullymais supprime la redirection et quelques messages.

Comme vous pouvez le voir, il y a un exit();à la fin de la fonction, donc si vous accrochez cette fonction avant l'autre, la sortie devrait empêcher tout autre crochet de tirer.

Scott
la source