问题描述

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

它没有… 我仍然重定向通过单站点和多站点安装进行测试。

我想我像往常一样想念一些明显的东西。 :) 如何做得更好?

Update

基于 Brady 的答案,我建立了一个非常简单的版本:

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

现在我们看到成功的消息,没有其他的动作被调用。你可以 download the plugin on GitHub 。使用它作为常规插件或 MU 插件。

最佳解决方案

不要删除该操作,但添加您自己的操作之前。如果您删除该操作,您将永远不会收到消息,表示升级成功。在这里,您可以提供自己的下一步做什么信息。

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();,所以如果你在另一个之前挂接这个功能,那么退出应该停止任何进一步的钩子的点火。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。