問題描述

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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。