WordPress add_filter('query_vars', 'my_new_vars');没有按预期工作

Wordpress add_filter('query_vars', 'my_new_vars'); not working as expected

我在使用 Wordpress 时遇到问题(令人震惊),它删除了我的 get 参数,我知道这是出于安全和其他一些原因的 WP 功能。

我要实现的目标如下:

  1. 加载产品页面
  2. 当客户点击立即预订时,他们将被重定向到立即咨询表单
  3. 现在查询表格有一个小部件可以检索客户正在查看的产品并使用 GET 参数我可以检索该产品

我试过如下添加get参数:

# functions.php

function gpd_register_query_vars($vars)
{
    $vars[0] = 'my_product_id';
    return $vars;
}

add_filter('query_vars', 'gpd_register_query_vars');

在我的小部件中

class GPD_Get_Product_Widget extends WP_Widget
{
    // ...

    function widget($args, $instance)
    {
        global $wp_query;
        var_dump($wp_query->query_vars['my_super_unique_var']);

        extract($instance);
        //output code
        echo $args['before_widget'];
        include 'widget.php';
        echo $args['after_widget'];
    }
}

//function to register the widget
function gpd_get_product_widget()
{
    register_widget('GPD_Get_Product_Widget');
}

add_action('widgets_init', 'gpd_get_product_widget');

但是,每当我尝试获取参数时,它都不存在。

Wordpress 不是最容易导航或使用的。我真的很困惑为什么 WP 把 $_GET 参数这样简单的东西搞得这么难。

非常感谢任何帮助。

我找到了答案,但不完全确定这是为什么,但是如果你像这样在 URL 中传递 2 个参数 /my-page?a=1&b=2,然后使用普通的旧 $_GET,你你会发现第一个元素是 q,第二个是你的 b 参数。

array(2) {
  'q' =>
  string(29) "/request-a-quote/a=1"
  'b' =>
  integer(1) "2"
}

看起来第一个参数被 Wordpress q(保留变量)占用,之后的任何内容都是您的附加参数(除非它们被 WP 保留)。

所以如果我要像这样构建我的 URL:

add_query_arg(['type' => 'holiday', 'product_id' => 12345], get_permalink($page_id) );

您必须添加将被忽略的第一个参数,然后第二个参数将作为 $_GET

我可能做错了什么,但这对我现在有用。任何帮助和指出我做错了什么都会很棒 - 因为这感觉不对但有效。