如何使用WordPress在URL中传递额外的变量
我在尝试将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']);
}
有任何想法吗?
回答:
要在“前端”上进行“ The WordPress Way”(在的上下文中不起作用wp-admin),您需要使用3个WordPress函数:
- add_query_arg() -使用新的查询变量(示例中为“ c” )创建URL
- 在query_vars过滤器-修改的列表公众查询变量是WordPress的知道(这仅适用于前端,因为WP查询不是在后端使用- wp-admin-所以这也不会提供admin-ajax)
- get_query_var() -检索在URL中传递的自定义查询变量的值。
注意:
$_GET
如果您这样做,则甚至无需触摸superglobals()。
例
在需要创建链接的页面上/设置查询变量:
如果是指向此页面的链接,只需添加查询变量
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">
如果是到其他页面的链接
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">
在您的functions.php或某些插件文件或自定义类中(仅前端):
function add_custom_query_var( $vars ){ $vars[] = "c";
return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );
在您希望检索并使用URL中设置的查询var的页面/函数上:
$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'] : "";
或其某些变体。
以上是 如何使用WordPress在URL中传递额外的变量 的全部内容, 来源链接: utcz.com/qa/400630.html