回答:
/**
 * Redirect admin pages.
 *
 * Redirect specific admin page to another specific admin page.
 *
 * @return void
 * @author Michael Ecklund
 *
 */
function disallowed_admin_pages() {
    global $pagenow;
    # Check current admin page.
    if ( $pagenow == 'edit.php' && isset( $_GET['post_type'] ) && $_GET['post_type'] == 'page' ) {
        wp_redirect( admin_url( '/post-new.php?post_type=page' ) );
        exit;
    }
}フックで上記の関数を起動しadmin_initます。
add_action( 'admin_init', 'disallowed_admin_pages' );
代替構文:
/**
 * Redirect admin pages.
 *
 * Redirect specific admin page to another specific admin page.
 *
 * @return void
 * @author Michael Ecklund
 *
 */
add_action( 'admin_init', function () {
    global $pagenow;
    # Check current admin page.
    if ( $pagenow == 'edit.php' && isset( $_GET['post_type'] ) && $_GET['post_type'] == 'page' ) {
        wp_redirect( admin_url( '/post-new.php?post_type=page' ) );
        exit;
    }
} );Michaelのソリューションはクラス内での使用を意図しているように見えるため、functions.phpで直接動作するスタンドアロン関数が必要な場合、以下の例には、customize.phpからテーマオプションページへのリダイレクトとMichaelの元の関数からのリダイレクトが含まれます。
function admin_redirects() {
    global $pagenow;
    /* Redirect Customizer to Theme options */
    if($pagenow == 'customize.php'){
        wp_redirect(admin_url('/admin.php?page=theme_options', 'http'), 301);
        exit;
    }
    /* OP's redirect from /wp-admin/edit.php?post_type=page */
    if($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'page'){
        wp_redirect(admin_url('/post-new.php?post_type=page', 'http'), 301);
        exit;
    }
}
add_action('admin_init', 'admin_redirects');