查询字符串值的最佳实践-对于查询字符串中提供的值,GET_QUERY_var始终为空

时间:2021-11-18 作者:S. Imp

我正在我的WP插件中构建一个表单。我需要通过在URL中提供如下值来指定要修改的记录:

https://example.com/wp-admin/admin.php?page=my_plugin-event-video-assoc&event_post_id=123

我已经正确设置了代码,以便运行所需的代码来处理url请求,但是get_query_var 始终返回NULL:

$event_post_id = get_query_var(\'event_post_id\', NULL);
var_dump($event_post_id); // this is always NULL
已阅读docs on custom query vars, 我试过了add_filter 在我的插件的主PHP文件中:

function myco_query_vars( $qvars ) {
    $qvars[] = \'event_post_id\';
    return $qvars;
}
add_filter( \'query_vars\', \'myco_query_vars\' );
但是,尽管这是我的插件所做的第一件事,但这并没有帮助get_query_vars 仍然返回NULL。我也尝试过将add\\u过滤器代码移动到其他各种位置,但这对我放置的位置没有任何影响。我是否需要在某种WP挂钩中运行该代码?

我可以提取event_post_id 来自superglobal$_GET[\'event_post_id\'] 但我希望我的代码能够观察WP的最佳实践。老实说,我不明白为什么Wordpress会有这种奇特的一面。我根本看不出它是如何提供任何安全性的,因为它没有验证任何东西。

谁能告诉我在Wordpress中使用自定义查询字符串值的最佳实践是什么?如果这是为了用户get\\u query\\u var,请帮助我修复代码,以便函数返回变量。

1 个回复
SO网友:fuxia

您可以通过以下操作获得准确的未更改值:

$event_id = filter_input( INPUT_GET, \'event_post_id\', FILTER_VALIDATE_INT );
在这里,我直接添加了验证过滤器,但您甚至可以将其移动到更复杂情况下的单独代码中。

WordPress的查询变量处理适用于您希望在值到达代码之前允许对其进行更改的情况。

"E;“最佳实践”;这是一个很重的表达,这就是为什么我们经常回避这个标签
编写您和其他人(即未来的您)可以维护和理解的代码。

如果有一种快速且可读的PHP方法,请使用它。filter_input() 提供客户端发送的变量,无论WP做什么,它都将保持不变。超级全球选手$_GET, $_POST 等等都是可以写的,你不能相信他们。

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的