在 wp-admin/admin 仪表板上获取当前页面 url?

Getting current page url on wp-admin/admin dashboard?

我正在 wp-admin/admin 仪表板上尝试获取当前页面 url,这可能吗?

我正在尝试使用这些代码,但似乎无法正常工作。

global $wp;
$current_page = add_query_arg( $wp->query_vars, home_url( $wp->request ) );

我想要的输出是这样的:https://example.com/1/wp-admin/admin.php?page=test 但是,输出变成这样:/1/wp-admin/admin.php?page=test&=https://example.com/1

非常感谢任何帮助

要检索您的 wordpress 站点管理区域的 URL,您可以使用 admin_url()https://developer.wordpress.org/reference/functions/admin_url/

它接受路径。所以如果你喜欢硬编码,你可以做 admin_url('admin.php?page=test');。但我想你想动态地拥有它。

我想,您的页面是管理菜单的一部分。每个菜单页面自动在 URL 中有一个页面参数,例如 page=test.

您想获得您正在查看的当前页面的 URL,因此您可以使用 $_GET 从 URL 中获取页面参数。

将所有这些信息放在一起,您的代码可能如下所示:

$current_page = admin_url( "admin.php?page=".$_GET["page"] );

我使用 http_build_query() 函数找到了一个非常完整的解决方案:

$current_page = admin_url(sprintf('admin.php?%s', http_build_query($_GET)));

http_build_query() 将自动将所有 $_GET 参数转换为查询字符串,可以使用 sprintf().

将其附加到基础管理员 URL

但是这不支持具有不同名称的页面(例如:edit.php 而不是 admin.php)。您可以使用类似这样的东西作为辅助函数来支持每个管理页面:

/**
 * Get the base URL of the current admin page, with query params.
 *
 * @return string
 */
function get_current_admin_url(): string
{
    return admin_url(sprintf(basename($_SERVER['REQUEST_URI'])));
}

# on your admin page..
$current_page = get_current_admin_url();

注意使用此函数,URLs 可以被最终用户操纵 /!\

您可以使用全局 $pagenow$typenow 获取当前管理页面。

例如,如果您只想定位 edit.php?post_type=page,您可以使用以下内容:

global $pagenow, $typenow;
  if( ! is_admin() || 'edit.php' !== $pagenow || 'page' !== $typenow ) return;