Как предотвратить перенаправление на «О» после обновления ядра?

9

В wp-admin/includes/update-core.phpнаходим следующую строку:

add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );

Я хочу удалить это действие, поэтому я создал плагин mu со следующим содержимым:

<?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' );
}

Это делает ... ничего. Я все еще перенаправлен. Протестировано с одной и несколькими площадками.

Наверное, я пропускаю что-то очевидное, как обычно. :)
Как это сделать лучше?

Обновить

Основываясь на ответе Брейди, я создаю очень минимальную версию:

<?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;
}

Теперь мы видим сообщение об успехе, и никакое другое действие не вызывается. Вы можете скачать плагин на GitHub . Используйте его как обычный плагин или как плагин MU.

Фуксия
источник
_core_updated_successfullyУпоминается @Brady действия кажется отсутствует 3.8. * (> 3,7 ??). Есть идеи о замене?
krembo99
@ krembo99 Это все еще там: /wp-admin/includes/update-core.phpв конце файла.
fuxia
да .. мой плохой Смотрел на кастомную установку ядра.
krembo99

Ответы:

6

Не удаляйте действие, а добавьте свое собственное перед ним. Если вы удалите действие, вы никогда не получите сообщение о том, что оно было успешно обновлено. Здесь вы можете предоставить свою собственную информацию о том, что делать дальше.

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 );

Я знаю, что в чате вы показали, что у вас возникли трудности с удалением действия, поэтому я начал искать решение, которое не удаляет действие, а добавляет его перед ним.

Приведенный выше код является копией основной функции, которую он подключает, _core_updated_successfullyно удаляет перенаправление и несколько сообщений.

Как вы можете видеть, exit();в конце функции есть символ, так что если вы перехватываете эту функцию раньше другой, то выход должен остановить дальнейшие перехваты.

Скотт
источник