如何使用WordPress在URL中传递额外的变量例

2022-08-30 08:25:32

我在尝试将URL中的额外变量传递给我的WordPress安装时遇到问题。

例如/news?c=123

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

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

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

有什么想法吗?


答案 1

要在“前端”上进行“The WordPress Way”(在上下文中不起作用),您需要使用3个WordPress函数:wp-admin

  • add_query_arg() - 使用新的查询变量创建 URL(示例中的“c”)
  • query_vars过滤器 - 修改WordPress知道的公共查询变量列表(这仅适用于前端,因为WP Query不在后端使用 - 因此这也将不可用wp-adminadmin-ajax)
  • get_query_var() - 检索在 URL 中传递的自定义查询变量的值。

注意:如果你这样做,甚至没有必要触摸超级全球()。$_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/' ) ) )?>">

在您的函数中.php,或者某些插件文件或自定义类(仅限前端):

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

在您希望检索和使用URL中设置的查询变量的页面/函数上:

$my_c = get_query_var( 'c' );

在后端 (wp-admin)

在后端,我们从不运行,因此主WP查询不会运行。因此,没有,钩子不会运行。wp()query varsquery_vars

在这种情况下,您需要恢复到检查超全局的更标准的方法。最好的方法可能是:$_GET

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

虽然在紧要关头你可以做尝试和真实

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

或其某些变体。


答案 2

解决这个问题的解决方案很少。首先,如果您愿意,可以选择插件:

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

另请查看:


推荐