WordPress add_filter('query_vars', 'my_new_vars');没有按预期工作
Wordpress add_filter('query_vars', 'my_new_vars'); not working as expected
我在使用 Wordpress 时遇到问题(令人震惊),它删除了我的 get 参数,我知道这是出于安全和其他一些原因的 WP 功能。
我要实现的目标如下:
- 加载产品页面
- 当客户点击立即预订时,他们将被重定向到立即咨询表单
- 现在查询表格有一个小部件可以检索客户正在查看的产品并使用 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
。
我可能做错了什么,但这对我现在有用。任何帮助和指出我做错了什么都会很棒 - 因为这感觉不对但有效。
我在使用 Wordpress 时遇到问题(令人震惊),它删除了我的 get 参数,我知道这是出于安全和其他一些原因的 WP 功能。
我要实现的目标如下:
- 加载产品页面
- 当客户点击立即预订时,他们将被重定向到立即咨询表单
- 现在查询表格有一个小部件可以检索客户正在查看的产品并使用 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
。
我可能做错了什么,但这对我现在有用。任何帮助和指出我做错了什么都会很棒 - 因为这感觉不对但有效。