如何在wp-admin/admin dashboard中获取当前页面的URL?

6

我正在尝试获取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 非常感谢任何帮助。

如果您只想获取当前URL,您应该能够使用$_SERVER['REQUEST_URI'],这就是add_query_arg在幕后使用的内容。我认为您也可以在技术上说$url = add_query_arg([]);来获取它。 - Chris Haas
@ChrisHaas 我已经尝试了这两个方法,但输出结果是:/1/wp-admin/admin.php?page=test。URL中的主域名没有在输出结果中显示。 - Amenadiel
4个回答

6

我找到了一个非常实用的解决方案,使用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();

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


有一个问题我发现了,就是当你在wp仪表盘(HTTP://site.local/wp-admin/)上使用echo $current_page时,它会显示**http://site.local/wp-admin/wp-admin/**。这意味着条件在我在仪表盘(HTTP://site.local/wp-admin/)上时不起作用。 - atiquratik

5

要检索您的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"] );


1
我明白了,我确实需要使用GET请求。我每天都在学习,非常感谢! - Amenadiel

2

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

例如,如果您想仅针对edit.php?post_type=page进行操作,可以使用以下代码:

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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接