۱ بهنام مرادی
استفاده از pre_user
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۰۲ مهر ۱۴۰۱

با سلام خدمت هم دوره ای‌های عزیز

طبق درخواست استاد این تاپیک رو ایجاد میکنم! اما ..

من سورس کد وردپرس رو در تمامی pre_user‌های موجود خوندم که چرا استفاده شدن و چه کاری انجام میدن و چرا باید استفاده بشن! اما برخلاف صحبت‌های این جلسه هست اندکی ، اگر نیاز هست استفاده صحبت‌های من رو با دلیل تصحیح می‌کنند:

apply_filters‌های استفاده در این ویدیو در حقیقت اضافه کاریه! چرا؟ چون خود تابع wp_inster_user عملیات sanitize رو انجام میده و فیلتر pre_user_ رو روی داده‌های sanitize شده اعمال میکنه.

پایین دو تا لینک براتون قرار میدم:

https://developer.wordpress.org/reference/functions/wp_insert_user/

https://github.com/WordPress/wordpress-develop/blob/6.0.2/src/wp-includes/user.php#L2051-L2469

این سورس کد تابع wp_insert_user هست اگر سورس را مطالعه کنید می‌بینید که هر جایی که نیاز هست یک پاکسازی اولیه انجام میده و سپس فیلتر رو داده که در اختیار داریم اعمال می‌کنه.

یک مثال :

	$sanitized_user_login = sanitize_user( $userdata['user_login'], true );
	/**
	 * Filters a username after it has been sanitized.
	 *
	 * This filter is called before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $sanitized_user_login Username after it has been sanitized.
	 */
	$pre_user_login = apply_filters( 'pre_user_login', $sanitized_user_login );

خب پس این pre_user_‌ها چرا اعمال شدن» 2 تا دلیل داره یکی اینکه برنامه نویس‌ها بتونن تغییرات مد نظر رو اعمال کنن دوم اینکه یک سری پاکسازی‌ها انجام میشه رو مقادیر پاس داده شده فایل زیر رو از مسیر وردپرس نگاه کنید همون خط کدهای اول

wp-includes/defualt-filters.php

foreach ( array( 'pre_term_name', 'pre_comment_author_name', 'pre_link_name', 'pre_link_target', 'pre_link_rel', 'pre_user_display_name', 'pre_user_first_name', 'pre_user_last_name', 'pre_user_nickname' ) as $filter ) {
   add_filter( $filter, 'sanitize_text_field' );
   add_filter( $filter, 'wp_filter_kses' );
   add_filter( $filter, '_wp_specialchars', 30 );
}

کی باید ازشون استفاده کنیم؟ در دو حالت زیر مثلا:

شما می‌خوایید کاربراتون هر نام کاربری وارد کردن قبل از ثبت شدن اسم برند خودتون رو بزنید قبلش مثل یوزر بگه behnam و شما با کدنویسی بگید 7leran_behnam و یکسان سازی کنید تمامی نام کاربری هارو یا مثال‌های بهترش هست برای عملیات مختلف روی nicname‌ها و ...

یا اگر شما تابع insert اختصاصی برای یوزر دارید یعنی داده‌های کاربران رو میگیرید و خودتون با اتصال به دیتابیس و جدول یوزر‌ها داده هارو وارد می‌کنید (توصیه نمیشه) ولی اون موقع برای اینکه یکسان سازی بشه در وردپرس و علاوه بر اون پاکسازی داده‌ها هم انجام بشه این این فیلتر‌ها استفاده می‌کنید.

پس فهمیدیم این فیلتر‌ها چیز خوبی هستن هم پاکسازی می‌کنند هم به برنامه نویس‌ها قابلیت توسعه میدن ولی چرا قبل از تابع wp_insert_user استاد اسفتاده کردن برای من سوال هست.

موفق باشید

سلام و درود اگر میشه استاد توضیح بدن عالی میشه

شهریار حسین زاده ۲۳ آبان ۱۴۰۱، ۱۰:۵۱