تفاوت بین کسی که تابع می‌شناسد و کسی که تابع انتخاب می‌کند

وردپرس بیش از ده هزار تابع دارد. کسی که نام همه را حفظ کند، هیچ‌وقت پیدا نمی‌شود؛ ولی کسی که «الگوی انتخاب» را می‌شناسد، در هر پروژه‌ای تابع درست را پیدا می‌کند. این تفاوت، در پروژه‌های واقعی خودش را نشان می‌دهد: یکی برای هر کار، چند گزینه را امتحان می‌کند و سرانجام گزینه‌ای می‌نویسد که شاید بهترین نباشد؛ دیگری پیش از نوشتن خط اول، سؤال درست را می‌پرسد و در چند ثانیه به تابع درست می‌رسد. این مقاله، همان چارچوبِ پرسیدنِ سؤال درست است — نه فهرست توابع، بلکه الگوی انتخاب.

اگر با مفاهیم پایه آشنا نیستید، وردپرس چیست و چگونه شروع کنیم، توابع وردپرس چیست، و نحوه استفاده از توابع وردپرس در پروژه‌ها پیش‌نیاز این مقاله است. مکمل این مقاله توابع ضروری وردپرس برای توسعه‌دهندگان و اصول کدنویسی تمیز است.

الگوی پیشوندها: نقشه راه سریع

یکی از زیبایی‌های وردپرس، نظم پنهان در نام‌گذاری توابع است. با شناخت این نظم، حدس‌زدن رفتار یک تابع، حتی بدون مستندات، ممکن می‌شود. جدول پیشوندها که در انتخاب تابع، به‌عنوان اولین فیلتر ذهنی استفاده می‌کنم:

پیشوندمعنامثال
get_خواندن داده و بازگرداندن آنget_post، get_option، get_userdata
the_خواندن و چاپ مستقیم دادهthe_title، the_content، the_permalink
is_بررسی شرط و برگرداندن بولیis_singular، is_home، is_user_logged_in
has_بررسی وجود یک ویژگیhas_post_thumbnail، has_category، has_action
add_افزودن چیزیadd_action، add_filter، add_shortcode
update_به‌روزرسانی داده موجودupdate_option، update_post_meta
delete_حذف دادهdelete_option، delete_post_meta
register_ثبت یک موجودیت جدیدregister_post_type، register_taxonomy
wp_توابع عمومی هسته وردپرسwp_insert_post، wp_remote_get، wp_nonce_field
esc_escape خروجیesc_html، esc_attr، esc_url
sanitize_پاک‌سازی ورودیsanitize_text_field، sanitize_email
__ / _e / _xتوابع ترجمه__()، _e()، _x()

نکته مهم: این پیشوندها، گاهی با هم ترکیب می‌شوند. get_the_title ترکیب get_ و the_ است که یعنی «بازگرداندن عنوان». has_post_thumbnail ترکیب has_ با مفهوم «تصویر شاخص». همین درک، در انتخاب تابع بی‌نظیر است. راهنمای کامل پیشوندها در توابع وردپرس چیست و توابع ضروری وردپرس آمده است.

قبل از جستجو در مستندات، پیشوند تابع را از خودتان بپرسید: «آیا داده را می‌خوانم یا می‌نویسم؟ آیا شرطی است یا نمایشی؟» نیمی از جستجوها با همین سؤال، حذف می‌شود.

الگوی پنج‌سؤالی انتخاب تابع

پیش از نوشتن هر خط کد، پنج سؤال را از خودم می‌پرسم. این الگو، در پروژه‌های مختلف، زمان انتخاب تابع را از چند دقیقه به چند ثانیه کاهش داده:

  1. نوع عمل چیست؟ خواندن، نوشتن، به‌روزرسانی، یا حذف؟
  2. لایه داده کدام است؟ نوشته، متادیتا، کاربر، گزینه، ترم، یا فایل؟
  3. خروجی مورد نیاز چیست؟ مقدار تکی، آرایه، شیء، یا بولی؟
  4. در چه زمانی اجرا می‌شود؟ در حلقه، در hook خاص، یا در پردازش فرم؟
  5. آیا نسخه جایگزین بهتری وجود دارد؟ بعضی توابع منسوخ شده‌اند و جانشین مدرن دارند.

مثال کاربردی: می‌خواهم اطلاعات نویسنده یک نوشته را بگیرم. سؤال اول: خواندن. سؤال دوم: کاربر. سؤال سوم: شیء کاربر یا مقدار مشخص. سؤال چهارم: در حلقه. سؤال پنجم: get_the_author_meta یا get_userdata؟ در حلقه، get_the_author_meta انتخاب درست است چون از cache داخلی حلقه استفاده می‌کند. راهنمای کامل در توابع داده‌های کاربر و توابع کاربران.

انتخاب تابع بر اساس لایه داده

وردپرس پنج لایه داده اصلی دارد. شناخت هر لایه و توابع اختصاصی‌اش، انتخاب را بسیار ساده می‌کند:

لایهتابع خواندنتابع نوشتنراهنما
نوشتهget_postwp_insert_postتوابع داده نوشته
متادیتاget_post_metaupdate_post_metaتوابع متادیتا
کاربرget_userdatawp_insert_userتوابع کاربران
گزینه‌هاget_optionupdate_optionتوابع گزینه‌ها
ترم‌هاget_termwp_insert_termتاکسونومی سفارشی

نکته کاربردی: اگر مطمئن نیستید داده در کدام لایه است، سؤال کنید «این داده به چه چیزی وابسته است؟» اگر به یک نوشته خاص وابسته است، متادیتای نوشته؛ اگر به سایت به‌طور کلی، گزینه؛ اگر به کاربر، متادیتای کاربر. این تفکیک، پایه معماری داده در وردپرس است که در ساختار هسته وردپرس و کار با Options API آمده.

انتخاب تابع بر اساس context اجرا

بسیاری از توابع وردپرس، در context خاصی کار می‌کنند. اشتباه در انتخاب context، باعث می‌شود تابع رفتار غیرمنتظره بدهد یا خطا بگیرد. سه context مهم:

Context اول، حلقه (The Loop): در حلقه، توابعی مثل the_title، the_content، get_the_ID بدون پارامتر کار می‌کنند و روی نوشته جاری اعمال می‌شوند. اگر خارج از حلقه فراخوانی شوند، ممکن است خطا بدهند یا به نوشته اشتباه اشاره کنند. راهنما در توابع داده نوشته.

Context دوم، hook مشخص: بعضی توابع فقط در hook خاصی کار می‌کنند. مثلاً is_singular در init کار نمی‌کند چون در آن لحظه، هنوز نوع صفحه تشخیص داده نشده. الگوی درست: استفاده در template_redirect یا wp. راهنما در هوک‌های وردپرس و استفاده درست از هوک‌ها.

Context سوم، AJAX و REST API: در این contextها، بعضی توابع مثل is_admin رفتار متفاوتی دارند. راهنما در ساخت API اختصاصی و REST API وردپرس.

تابع درست در context اشتباه، مثل کلید درست در قفل اشتباه است: هر دو سالم، ولی کار نمی‌کنند.

جانشین‌های مدرن: توابع منسوخ و جایگزین‌ها

بعضی توابع وردپرس، در نسخه‌های جدید منسوخ (deprecated) شده‌اند و جانشین مدرن دارند. شناخت این جانشین‌ها، در پروژه‌های بلندمدت حیاتی است:

تابع منسوخجانشین مدرننسخه
get_currentuserinfowp_get_current_user4.5
get_usermetaget_user_meta3.0
update_usermetaupdate_user_meta3.0
get_the_category_by_IDget_category3.0
get_category_by_slugget_term_by4.4
wp_get_single_postget_post3.5
get_post_revisionwp_get_post_revision3.0
date_i18n (با پارامتر GMT)wp_date5.3

نکته: توابع منسوخ، در نسخه‌های فعلی وردپرس هنوز کار می‌کنند ولی در نسخه‌های آینده ممکن است حذف شوند. اگر پروژه شما بلندمدت است، از همان اول از جانشین مدرن استفاده کنید. راهنمای خطای Deprecated در خطای Deprecated در PHP. یک تجربه میدانی: در پروژه‌ای، از get_currentuserinfo در ده فایل استفاده شده بود. با ارتقای PHP به نسخه ۸، هشدارهای Deprecated در لاگ شروع شد. بازنویسی همه به wp_get_current_user، نیم روز وقت گرفت.

الگوهای پرتکرار و توابع پیشنهادی

در پروژه‌های واقعی، الگوهای تکراری زیاد دیده می‌شود. برای هر الگو، تابع پیشنهادی و دلیلش:

الگوتابع پیشنهادیدلیل
گرفتن اطلاعات نوشته در حلقهget_the_ID، get_the_titleبدون پارامتر، از cache داخلی حلقه استفاده می‌کند
گرفتن اطلاعات نوشته خارج حلقهget_post($id)یک کوئری، تمام داده نوشته
نمایش متادیتای سفارشیget_post_meta($id، $key، true)پارامتر سوم true برای مقدار تکی
دریافت تنظیمات افزونهget_option($key، $default)مقدار پیش‌فرض، جلوی خطا را می‌گیرد
ذخیره URLesc_url_rawبرای ذخیره، نه escape نمایشی
نمایش URLesc_urlبرای href و src
ذخیره متنsanitize_text_field + wp_unslashترکیب پاک‌سازی و حذف escaping خودکار
لیست نوشته‌ها سفارشیWP_Query یا get_postsWP_Query برای پیچیده، get_posts برای ساده
ساخت URL با پارامترadd_query_argمدیریت درست query string

این جدول، از تجربه چند سال کار روی پروژه‌های وردپرسی بیرون آمده. یک الگوی شخصی: هر بار که در انتخاب تابع شک می‌کنم، یک ردیف جدید به این جدول اضافه می‌کنم. با گذشت زمان، این جدول به یک مرجع شخصی تبدیل می‌شود که سرعت انتخاب را چند برابر می‌کند. راهنمای کامل توابع در توابع ضروری وردپرس و توابع وردپرس چیست.

معیارهای انتخاب بین دو گزینه مشابه

گاهی چند تابع، ظاهراً یک کار انجام می‌دهند. معیارهای انتخاب بین آن‌ها، بر اساس تجربه:

مثال اول، get_posts در برابر WP_Query: get_posts برای کوئری‌های ساده با پارامترهای محدود؛ WP_Query برای کوئری‌های پیچیده با فیلترهای چندگانه، صفحه‌بندی، یا تنظیمات دقیق. راهنمای کامل در کدنویسی کوئری سفارشی و توابع کوئری سفارشی.

مثال دوم، get_option در برابر get_theme_mod: get_option برای تنظیمات عمومی افزونه و سایت؛ get_theme_mod برای تنظیمات ظاهری قالب که از Customizer می‌آید. راهنمای تفکیک در توابع تنظیمات قالب و کار با Options API.

مثال سوم، wp_redirect در برابر wp_safe_redirect: wp_safe_redirect ایمن‌تر است و فقط به دامنه‌های مجاز ریدایرکت می‌کند؛ wp_redirect برای مقاصد خارجی معتبر با دلیل روشن. توصیه: همیشه wp_safe_redirect، مگر استثنای مستند. راهنما در توابع ریدایرکت وردپرس.

مثال چهارم، esc_url در برابر esc_url_raw: esc_url برای نمایش در HTML؛ esc_url_raw برای ذخیره در دیتابیس. تفصیل در پاک‌سازی داده‌ها و PHP امن در وردپرس.

مثال پنجم، the_content در برابر get_the_content: the_content فیلترها را اعمال می‌کند و چاپ می‌کند؛ get_the_content بدون اعمال فیلتر برمی‌گرداند. برای نمایش استاندارد، the_content؛ برای پردازش داده، get_the_content با apply_filters. راهنما در هوک‌های محتوای نوشته و توابع داده نوشته.

وقتی بین دو تابع شک می‌کنم، از خودم می‌پرسم: کدام یک، context محتمل‌تر را در آینده تحمل می‌کند؟ انتخاب، تصمیم برای امروز نیست؛ تصمیم برای دو سال بعد است.

اشتباهات رایج در انتخاب تابع

  • استفاده از تابع نمایشی در concatenation: the_title چاپ می‌کند نه برمی‌گرداند. باید از get_the_title استفاده کنید. راهنما در توابع داده نوشته.
  • استفاده از sanitize_text_field برای همه چیز: این تابع برای متن کوتاه است؛ برای URL از esc_url_raw، برای HTML از wp_kses_post. راهنما در پاک‌سازی داده‌ها.
  • نبود wp_unslash قبل از پاک‌سازی: کاراکترهای بک‌اسلش، متون فارسی را به‌هم می‌ریزند. راهنما در PHP امن در وردپرس.
  • استفاده از توابع منسوخ: خطای Deprecated در نسخه‌های بعدی. راهنما در خطای Deprecated در PHP.
  • نبود پارامتر سوم در get_post_meta: آرایه به‌جای مقدار. راهنما در توابع متادیتا.
  • استفاده از wp_redirect بدون exit: خطر امنیتی جدی. راهنما در توابع ریدایرکت.
  • نبود بررسی is_wp_error: خطای Fatal هنگام برگشت خطا. راهنما در اعتبارسنجی داده‌ها.
  • استفاده از date() به‌جای current_time: نادیده‌گرفتن منطقه زمانی سایت. راهنما در توابع تاریخ و زمان.
  • عدم استفاده از توابع URL استاندارد: hardcode کردن دامنه، مهاجرت را دردناک می‌کند. راهنما در توابع لینک و URL.
  • استفاده از curl به‌جای HTTP API: عدم سازگاری با محیط‌های مختلف. راهنما در توابع HTTP وردپرس.
  • نادیده‌گرفتن cache داخلی وردپرس: کوئری‌های تکراری. راهنما در بهینه‌سازی کد وردپرس.
  • انتخاب تابع بدون تست در context واقعی: رفتار غیرمنتظره در Production. راهنما در تست و دیباگ پروژه‌ها.

الگوی شخصی من: دفتر انتخاب تابع

یک عادت که در چند سال اخیر، سرعت و کیفیت انتخاب تابع را در من چند برابر کرده: نگه‌داشتن یک «دفتر انتخاب تابع». این دفتر، یک فایل متنی در مخزن پروژه است که سه ستون دارد: یک — نیاز: شرح یک‌خطی مسئله. دو — تابع انتخابی: تابعی که انتخاب شد و چرا. سه — جایگزین‌های رد‌شده: توابع دیگری که بررسی و رد شدند و دلیل رد. با گذشت زمان، این دفتر به یک مرجع شخصی تبدیل می‌شود که در هر پروژه جدید، از تجربه پروژه‌های قبلی بهره می‌برد. راهنمای ساختاربندی پروژه در ساختاربندی پروژه وردپرس و استانداردهای کدنویسی وردپرس. یک تجربه میدانی: در پروژه‌ای با چهار توسعه‌دهنده، همین دفتر، تفاوت بین کدی که هرکدام از آن‌ها به سبک خودش نوشته بود و کدی که یکدست به‌نظر می‌رسید را می‌ساخت. یک ماه بعد، تیم جدیدی که پروژه را تحویل گرفت، با خواندن این دفتر، منطق انتخاب‌ها را در چند دقیقه فهمید.

جمع‌بندی

انتخاب تابع مناسب در وردپرس، یک مهارت است که با سه ابزار بهبود می‌یابد: الگوی پیشوندها (نقشه سریع)، الگوی پنج‌سؤالی (چارچوب تصمیم)، و دفتر انتخاب تابع (تجربه انباشته). سه اصل را در پایان تاکید می‌کنم: اول، پیش از جستجو در مستندات، پیشوند و context مورد نیاز را مشخص کنید. دوم، همیشه تابع استاندارد وردپرس را بر تابع خام PHP ترجیح دهید — امنیت، بهینگی، و سازگاری در آن نهفته است. سوم، انتخاب‌های خود را مستند کنید تا در آینده به مرجع تبدیل شود.

اگر امروز یک کار در این مسیر انجام می‌دهید: فایل دفتر انتخاب تابع را در پروژه فعلی خود بسازید و پنج الگوی پرتکرار این مقاله را در آن ثبت کنید. همین یک کار کوچک، در سه ماه آینده، به یک سرمایه تبدیل می‌شود. اگر تجربه‌ای از یک انتخاب دشوار بین دو تابع دارید که با معیار مشخصی حل شد، در دیدگاه‌ها بنویسید — همان گزارش‌های واقعی، این راهنما را برای توسعه‌دهنده بعدی دقیق‌تر می‌کند. 🧭