web-dev-qa-db-fra.com

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

Dans wp-admin/includes/update-core.php on trouve la ligne suivante:

add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );

Je veux supprimer cette action, alors j'ai 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 sur un ou plusieurs sites.

Je suppose que quelque chose d’évident me manque, comme d’habitude. :)
Comment le faire mieux?

Mettre à 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 ordinaire ou comme plugin MU.

8
fuxia

Ne supprimez pas l'action mais ajoutez la vôtre avant celle-ci. Si vous supprimez l'action, vous ne recevrez jamais le message indiquant que la mise à niveau a été effectuée avec succès. Ici, vous pouvez fournir vos propres informations sur ce qu'il faut faire ensuite.

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 en conversation que vous avez montré que vous aviez du mal à supprimer l'action, alors je me suis mis à la recherche d'une solution qui n'enlève pas l'action mais en ajoute une avant celle-ci.

Le code ci-dessus est une copie de la fonction principale à laquelle il se connecte sur _core_updated_successfully mais supprime la redirection et quelques messages.

Comme vous pouvez le constater, il y a une exit(); à la fin de la fonction. Par conséquent, si vous décrochez cette fonction avant l'autre, la sortie devrait empêcher tout autre crochet de tirer.

5
Brady