لا أفهم حقًا سبب التحقق من وجود وظيفة 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 ، فيجب ألا تدعم الإصدارات السابقة ، حيث إنها جميعها غير آمنة تمامًا وأي شخص يستخدمها يحتاج إلى ترقية RIGHT NOW.
في العادة ، لا يتعين عليك التحقق من وجود وظائف من داخل WP ، على عكس وظائف المكونات الإضافية التي قد لا يتم تنشيطها.
أين رأيت هذا التعليق الذي نقلته؟ يجب إزالته.
إذا فهمت سؤالك بشكل صحيح - فأنت تسأل لماذا لا توجد حاجة للتحقق مما إذا كانت check_admin_referer () محددة أيضًا؟
بقدر ما أرى من مستندات هذه الوظيفة أقدم بكثير (منذ WP 1.2.0) من wp_nonce_field () (منذ WP 2.0.4). لذلك افترض أنك أقل احتمالًا في مواجهة نسخة قديمة لا تحتوي على check_admin_referer ().
تقوم بالتحقق من وجود وظيفة لمنع حدوث خطأ فادح وإيقاف التطبيق اللاحق عند تنفيذ التعليمات البرمجية الخاصة بك على إصدار من WordPress لا يتضمن الوظيفة التي تحاول استخدامها.
هل هذا يضمن التوافق مع الوراء؟ إطلاقا. الأهم من ذلك ، أن عملية التحقق هذه تمنع رمزك من التسبب في تعطل التطبيق بالكامل عند تنفيذ التعليمات البرمجية:
يجب أن تكون معالجة الأخطاء "رشيقة" في أي نظام - وهذا يعني أن التطبيق يجب أن يعرف كيفية اكتشاف الأخطاء الخاصة به والتعامل معها بطريقة مناسبة مع الحد الأدنى من المقاطعة للمستخدمين النهائيين. اقرأ المزيد على http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-Two/2/#wIxuV7yhLhBTU1UZ.99
وبالتالي ، في التعليمات البرمجية الخاصة بك ، يمكنك القيام بما يلي:
if ( function_exists('wp_nonce_field') ) {
wp_nonce_field('gmp_nonce_check');
} else {
//do nothing
exit() ;
}