问题描述

我无法尝试将 url 中的额外变量传递给我的 wordpress 安装。

例如/news?c=123

由于某些原因,它仅在网站根 www.example.com?c=123 上起作用,但如果该 URL 包含任何更多信息 www.example.com/news?c=123,则它不起作用。我的主题目录中的 functions.php 文件中有以下代码。

if (isset($_GET['c']))
{
  setcookie("cCookie", $_GET['c']);
}

if (isset($_SERVER['HTTP_REFERER']))
{
  setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}

有任何想法吗?

最佳解决方案

解决这个问题的方法很少。首先你可以去一个插件,如果你想要的:

或者手动编码,看看这篇文章:

还查看:

  • add_query_arg

次佳解决方案

为了使”front-end”(在 wp-admin 上下文中不起作用) 的 「WordPress 方式」,您需要使用 3 个 WordPress 功能:

  • add_query_arg() – 使用新的查询变量创建 URL(在您的示例中为’c’)

  • query_vars 过滤器 – 修改 WordPress 知道的 public query variables 的列表 (这仅适用于 front-end,因为 WP Query 不在后端使用 – wp-admin),因此在 admin-ajax 中也不可用)

  • get_query_var() – 检索您的 URL 中传递的自定义查询变量的值。

注意:如果你这样做,没有必要甚至触摸超级桌面 ($_GET) 。

例子

在需要创建链接/设置查询变量的页面上:

如果它是一个返回此页面的链接,只需添加查询变量

<a href="<?php%20echo%20esc_url(%20add_query_arg(%20'c',%20$my_value_for_c%20)%20)?>">

如果它是一个其他页面的链接

<a href="<?php%20echo%20esc_url(%20add_query_arg(%20'c',%20$my_value_for_c,%20site_url(%20'/some_other_page/'%20)%20)%20)?>">

在你的 functions.php,或一些插件文件或自定义类 (仅限 front-end):

function add_custom_query_var( $vars ){
  $vars[] = "c";
  return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );

在您要检索的页面/函数上,并使用 URL 中的查询 var set:

$my_c = get_query_var( 'c' );

在后端 (wp-admin)

在后端我们没有运行 wp(),所以主要的 WP Query 不能运行。因此,没有 query varsquery_vars 钩子没有运行。

在这种情况下,您需要恢复更准确的检查 $_GET 超全球的方法。最好的办法是:

$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );

虽然在一个捏,你可以做的尝试和真实

$my_c = isset( $_GET['c'] ? $_GET['c'] : "";

或其一些变体。

第三种解决方案

在 function.php 中添加以下代码

add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{
    $vars[] = 'var1'; // var1 is the name of variable you want to add
    return $vars;
}

那么你将能够使用 $ _GET [‘var1’]

参考文献

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