问题描述
我无法尝试将 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 vars
,query_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。