我在尝试将url中的额外变量传递给我的WordPress安装时遇到了麻烦。
例如 /news?c=123
/news?c=123
出于某种原因,它仅在网站根目录上有效,www.example.com?c=123但是如果url中包含更多信息,则它将无效www.example.com/news?c=123。我的主题目录中的functions.php文件中包含以下代码。
www.example.com?c=123
www.example.com/news?c=123
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函数:
$_GET
例 在需要创建链接的页面上/设置查询变量:
如果是指向此页面的链接,只需添加查询变量
<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'] : "";
或其某些变体。