为什么我需要在使用之前检查WP_NONCE_FIELD()是否存在
-
16-10-2019 - |
题
我真的不明白为什么在运行之前检查Nonce功能是否存在...
if ( function_exists('wp_nonce_field') )
wp_nonce_field('gmp_nonce_check');
我理解它是为了向后兼容...
还请注意您如何验证
wp_nonce_field
在尝试向后兼容之前,功能存在
但是如果我在邮寄后我检查一下,它都不会破裂
if ( isset($_POST['submit']) ) {
check_admin_referer('gmp_nonce_check');
解决方案
答案是您不应该在使用之前检查WP_Nonce_field()是否存在!
执行检查的建议假设您希望在函数存在之前与WordPress版本兼容。如果Rarst是正确的,它是在2.0.4中引入的,那么您不应支持早期版本,因为它们都是绝对不安全的,并且任何使用它们的人都需要立即升级。
通常,您不必检查WP内部的函数的存在,这与可能无法激活的插件的功能不同。
您在哪里看到您引用的评论?应该删除。
其他提示
如果我正确理解您的问题 - 您问为什么也无需检查check_admin_referer()是否也定义了?
据我从文档中看到的,此功能比WP_Nonce_field()(由于WP 2.0.4)年龄较大(由于WP 1.2.0)。因此,我认为您遇到的版本的可能性要小得多,因为它没有check_admin_referer()。
您检查是否存在一个函数,以防止致命错误,并在WordPress上执行代码时会停止使用,该版本不包括您尝试使用的功能。
这是否确保向后兼容?绝对地。但是,更重要的是,此检查可防止您的代码导致整个应用程序执行时崩溃:
在任何系统中,错误处理都应“优雅” - 这意味着应用程序应该知道如何以某种适当的方式检测其自己的错误并以最小的最终用户中断来处理它们。阅读更多 http://www.devshed.com/c/a/php/php/php-application-development-park-part-two/2/#wixuv7yhlhbtu1uz.99
因此,在您的代码中,您可以执行以下操作:
if ( function_exists('wp_nonce_field') ) {
wp_nonce_field('gmp_nonce_check');
} else {
//do nothing
exit() ;
}