توسعه‌دهنده‌ای که فهرست توابع پرکاربرد وردپرس را در ذهن دارد، به‌جای جستجو در مستندات، وقت خود را صرف حل مسئله می‌کند. در پروژه‌های واقعی، تفاوت چشمگیری بین کسی که برای هر کار سراغ گوگل می‌رود و کسی که فهرست توابع ضروری را می‌شناسد، در سرعت و کیفیت کد دیده می‌شود. این مقاله، فهرست توابع ضروری وردپرس را در ده دسته ارائه می‌کند؛ نه فهرست خام، بلکه با نقش هر تابع در جریان کاری و الگوهای ترکیبی که در پروژه‌ها به‌کار می‌رود. برای درک مفاهیم پایه، توابع وردپرس چیست، شروع اصولی کدنویسی، و توسعهٔ وردپرس چیست را پیش از ادامه ببینید.

توابع دادهٔ نوشته

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

get_the_ID();                    // شناسهٔ نوشتهٔ جاری
get_the_title( $post_id );       // عنوان
get_the_content( null, false, $post_id ); // محتوا (پردازش‌شده)
get_the_excerpt( $post_id );     // خلاصه
get_permalink( $post_id );       // لینک دائمی
get_the_date( 'Y-m-d', $post_id ); // تاریخ
get_the_author_meta( 'display_name', $author_id ); // نویسنده
get_post( $post_id );            // شیء کامل نوشته
get_posts( array( 'post_type' => 'post' ) ); // لیست نوشته‌ها

نکته‌ها: یک — get_the_content با پارامتر دوم false: پیش‌فرض این پارامتر، true است که محتوا را با اعمال فیلترها برمی‌گرداند. اگر فقط متن خام لازم است، false بگذارید. دو — get_posts در برابر WP_Query: get_posts ساده‌تر است ولی امکانات کمتری دارد. برای کوئری‌های پیچیده، WP_Query را انتخاب کنید. سه — بررسی null: در توابعی که ممکن است مقدار نبود برگردانند، همیشه if ( $value ) یا ! empty() را بگذارید. فهرست کامل در توابع وردپرس برای داده‌های نوشته. کاربرد در قالب در ساختار فایل‌های قالب استاندارد و توسعهٔ قالب از صفر.

توابع متادیتا

متادیتا، دادهٔ اضافی روی نوشته، کاربر یا ترم است. چهار تابع اصلی در این دسته:

get_post_meta( $post_id, '_key', true );       // خواندن
get_post_custom( $post_id );                    // همهٔ متاها
add_post_meta( $post_id, '_key', $value, true ); // افزودن
update_post_meta( $post_id, '_key', $value );   // به‌روزرسانی
delete_post_meta( $post_id, '_key' );           // حذف

// برای کاربر
get_user_meta( $user_id, '_key', true );
update_user_meta( $user_id, '_key', $value );

// برای ترم
get_term_meta( $term_id, '_key', true );
update_term_meta( $term_id, '_key', $value );

نکته: پارامتر سوم get_*_meta را همیشه true بگذارید تا مقدار تکی برگردد، نه آرایه. اگر ممکن است چند مقدار با یک کلید باشد، false بگذارید. راهنمای کامل در توابع متادیتا، کار با متاباکس‌ها، کار با User Meta، و تاکسونومی سفارشی.

متادیتا، تنها راه ذخیرهٔ داده‌های اضافی روی موجودیت‌های وردپرس است؛ استفادهٔ درست از آن، تفاوت بین ساختار تمیز و دیتابیس آشفته را می‌سازد.

توابع گزینه‌ها

گزینه‌ها، دادهٔ سراسری سایت هستند. سه تابع اصلی به‌علاوه توابع شبکه:

get_option( 'my_key', 'default' );      // خواندن با مقدار پیش‌فرض
update_option( 'my_key', $value );        // به‌روزرسانی یا افزودن
add_option( 'my_key', $value );           // افزودن (بدون به‌روزرسانی)
delete_option( 'my_key' );                 // حذف

// در مالتی‌سایت
get_site_option( 'my_network_key' );
update_site_option( 'my_network_key', $value );

نکتهٔ کلیدی: همیشه پیشوند اختصاصی برای کلیدهای گزینه. و در get_option، مقدار پیش‌فرض را بگذارید تا بین «نبود» و «مقدار false» تفاوت بگذارید. راهنمای کامل در کار با Options API، توابع گزینه‌های سایت، و ساخت صفحهٔ تنظیمات.

توابع کاربر و دسترسی

مدیریت کاربران و بررسی دسترسی، بخشی جدایی‌ناپذیر از هر پروژهٔ جدی است:

get_current_user_id();                      // شناسهٔ کاربر جاری
get_userdata( $user_id );                    // شیء کاربر
get_user_by( 'email', 'user@example.com' );
wp_get_current_user();                       // کاربر جاری
is_user_logged_in();                         // آیا لاگین است؟
current_user_can( 'edit_posts' );            // بررسی دسترسی
current_user_can( 'edit_post', $post_id );   // دسترسی به نوشتهٔ خاص
get_currentuserinfo();                       // منسوخ، از wp_get_current_user استفاده کنید
wp_set_current_user( $user_id );             // تغییر کاربر جاری

نکته: current_user_can با پارامتر دوم، برای بررسی دسترسی به یک منبع خاص مفید است. راهنما در توابع کاربران، توابع دادهٔ کاربر، بررسی وضعیت ورود، توابع نقش و دسترسی، و افزونه‌های مدیریت کاربران.

توابع تاکسونومی

کار با دسته، برچسب و تاکسونومی سفارشی، در هر پروژهٔ محتوایی لازم است:

get_terms( array(
    'taxonomy'   => 'category',
    'hide_empty' => true,
) );

get_term( $term_id, 'category' );
get_term_by( 'slug', 'news', 'category' );
get_the_terms( $post_id, 'category' );
get_term_link( $term );
wp_get_post_terms( $post_id, 'post_tag' );
has_term( 'news', 'category', $post_id );
wp_set_object_terms( $post_id, array( 5, 12 ), 'category' );

نکته: همیشه is_wp_error را بعد از get_terms و get_the_terms چک کنید. راهنمای کامل در توابع دسته‌بندی، توابع برچسب، تاکسونومی سفارشی، و ساخت تاکسونومی.

توابع URL و لینک

ساخت URL، یکی از پرتکرارترین کارها در قالب و افزونه است:

home_url( '/contact' );              // URL صفحهٔ اصلی
site_url( '/wp-admin' );             // URL نصب وردپرس
admin_url( 'post-new.php' );         // URL پیشخوان
get_permalink( $post_id );            // لینک دائمی
get_term_link( $term );               // لینک آرشیو ترم
get_author_posts_url( $author_id );   // لینک نویسنده
get_search_link( 'query' );           // لینک جستجو
get_category_link( $cat_id );         // لینک دسته
wp_logout_url( home_url() );          // لینک خروج با بازگشت
wp_login_url();                       // لینک ورود
add_query_arg( 'page', 2, $url );     // افزودن پارامتر به URL
remove_query_arg( 'utm_source', $url ); // حذف پارامتر

نکته: هرگز URL را با concatenation خام نسازید. همیشه از توابع وردپرس استفاده کنید تا با نصب در زیرپوشه و تغییر دامنه سازگار باشد. راهنما در توابع لینک و URL و ساختار URL و سئو.

توابع کوئری

کوئری‌های سفارشی، قلب انعطاف‌پذیری نمایش محتوا هستند:

$query = new WP_Query( array(
    'post_type'      => 'post',
    'posts_per_page' => 10,
    'no_found_rows'  => true,
) );

if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post();
        // محتوای حلقه
    endwhile;
    wp_reset_postdata();
endif;

get_posts( array( 'numberposts' => 5 ) );
get_terms( array( 'taxonomy' => 'category' ) );
wp_list_pluck( $query->posts, 'ID' );

نکته: پارامتر no_found_rows اگر صفحه‌بندی ندارید، صرفه‌جویی زمان قابل‌توجه دارد. راهنمای کامل در کدنویسی کوئری سفارشی، توابع کوئری سفارشی، و بهینه‌سازی کوئری‌ها.

توابع امنیت

امنیت، بدون این توابع، آسیب‌پذیر است. فهرست ضروری:

// پاک‌سازی ورودی
sanitize_text_field( $input );
sanitize_email( $email );
sanitize_key( $key );
sanitize_url( $url );
esc_url_raw( $url );
absint( $number );
wp_kses_post( $html );

// escape خروجی
esc_html( $text );
esc_attr( $text );
esc_url( $url );
esc_js( $text );
wp_kses_post( $html );

// nonce
wp_nonce_field( 'action', 'name' );
wp_verify_nonce( $nonce, 'action' );
wp_create_nonce( 'action' );
check_ajax_referer( 'action', 'name' );

نکته: هر دادهٔ کاربر باید با تابع مناسب پاک‌سازی شود. هر خروجی باید escape شود. راهنمای کامل در PHP امن در وردپرس، پاک‌سازی داده‌ها، اعتبارسنجی داده‌ها، نانس وردپرس، توابع امنیت و پاک‌سازی، و امنیت پروژهٔ وردپرس.

توابع ترجمه و زبان

برای سایت‌های قابل ترجمه، این توابع ضروری هستند:

__( 'Hello', 'my-plugin' );            // برگرداندن ترجمه
_e( 'Hello', 'my-plugin' );             // چاپ ترجمه
_x( 'Post', 'noun', 'my-plugin' );      // ترجمه با context
_n( '%s post', '%s posts', $count, 'my-plugin' );  // جمع
esc_html__( 'Hello', 'my-plugin' );    // ترکیب escape و ترجمه
esc_attr__( 'Hello', 'my-plugin' );
load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );
get_locale();                            // زبان فعلی
is_rtl();                                // راست‌به‌چپ؟

نکته: Text Domain باید با نام پروژه یکسان باشد و در همه‌جا یکسان نوشته شود. راهنما در آماده‌سازی قالب برای فارسی و فارسی‌سازی.

توابع هوک و اکشن

ثبت و مدیریت هوک‌ها، پایهٔ توسعهٔ افزونه و قالب است:

add_action( 'init', 'my_callback' );
add_action( 'init', 'my_callback', 20, 2 );
add_filter( 'the_content', 'my_filter' );
add_filter( 'the_content', 'my_filter', 10, 1 );
remove_action( 'init', 'my_callback' );
remove_filter( 'the_content', 'my_filter' );
did_action( 'init' );                    // چند بار اجرا شده؟
has_action( 'init', 'my_callback' );     // ثبت شده؟
do_action( 'my_custom_hook', $arg1, $arg2 );
apply_filters( 'my_custom_filter', $value, $arg );
current_filter();                         // فیلتر جاری

نکته: پارامتر چهارم add_action و add_filter تعیین می‌کند تابع شما چند پارامتر از هوک دریافت کند. راهنمای کامل در هوک‌های وردپرس، تفاوت اکشن و فیلتر، نحوهٔ استفاده از add_action، نحوهٔ استفاده از add_filter، حذف اکشن هوک، و راهنمای حرفه‌ای هوک‌ها.

توابع بارگذاری asset

بارگذاری درست CSS و JS، شرط بقای سرعت سایت است:

wp_enqueue_style(
    'my-style',
    get_stylesheet_directory_uri() . '/assets/css/main.css',
    array( 'parent-style' ),
    '1.0.0'
);

wp_enqueue_script(
    'my-script',
    get_stylesheet_directory_uri() . '/assets/js/main.js',
    array( 'jquery' ),
    '1.0.0',
    true // در فوتر بارگذاری شود
);

wp_localize_script( 'my-script', 'myData', array(
    'ajaxUrl' => admin_url( 'admin-ajax.php' ),
    'nonce'   => wp_create_nonce( 'my_nonce' ),
) );

wp_enqueue_media();                    // برای بارگذاری رسانه در پیشخوان
wp_register_style();                    // ثبت بدون چاپ
wp_deregister_script( 'jquery' );       // حذف

نکته: پارامتر وابستگی (آرایه)، ترتیب لود را تضمین می‌کند. برای انتقال داده از PHP به JS، از wp_localize_script استفاده کنید. راهنما در تأثیر افزونه‌ها بر سرعت و بهینه‌سازی کد وردپرس.

توابع کمکی و ابزاری

فهرستی از توابع پرکاربرد که در پروژه‌ها به‌طور مکرر به‌کار می‌آیند:

wp_parse_args( $args, $defaults );     // ترکیب آرایه با پیش‌فرض
shortcode_atts( $defaults, $atts );     // پردازش آتربیوت شورت‌کد
wp_list_pluck( $array, 'ID' );          // استخراج ستون
wp_json_encode( $data );                 // تبدیل به JSON
maybe_serialize( $data );                // سریال‌سازی شرطی
wp_kses_post( $html );                   // فیلتر HTML مجاز
is_wp_error( $result );                  // بررسی خطا
wp_die( 'پیام' );                        // توقف با پیام
wp_send_json_success( $data );           // پاسخ AJAX موفق
wp_send_json_error( $message );          // پاسخ AJAX ناموفق
wp_mail( $to, $subject, $message );      // ارسال ایمیل
wp_remote_get( $url, $args );            // درخواست HTTP
wp_remote_post( $url, $args );           // درخواست HTTP POST
is_wp_error( $response );                // بررسی خطای HTTP
wp_remote_retrieve_body( $response );    // بدنهٔ پاسخ

نکته: برای درخواست‌های HTTP، همیشه از توابع وردپرس استفاده کنید، نه curl یا file_get_contents. راهنما در توابع HTTP وردپرس، اتصال به سرویس‌های خارجی، ساخت شورت‌کد، و ساخت API اختصاصی.

فهرست توابع ضروری، مثل جعبه‌ابزار یک تعمیرکار ماهر است؛ هر ابزار جای خودش را دارد و تشخیص درست ابزار، نیمی از تعمیر است.

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

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

  • استفاده از the_* در concatenation: این توابع خروجی را چاپ می‌کنند، مقدار برنمی‌گردانند. باید از get_the_* استفاده کنید. توابع دادهٔ نوشته.
  • فراخوانی get_posts برای کوئری‌های پیچیده: get_posts امکانات WP_Query را ندارد. برای کوئری‌های پیچیده، از WP_Query. کوئری سفارشی.
  • نبود escape در توابع get_*: این توابع خروجی را escape نمی‌کنند. باید خودتان esc_html یا معادل را اضافه کنید. پاک‌سازی داده‌ها.
  • نبود is_wp_error بعد از توابع برگردانندهٔ خطا: توابعی مثل get_terms و wp_remote_get، WP_Error برمی‌گردانند. بدون بررسی، خطای Fatal می‌دهید. اعتبارسنجی داده‌ها.
  • استفاده از توابع منسوخ: مثل get_currentuserinfo یا wp_get_single_post. همیشه از معادل جدید استفاده کنید. خطای Deprecated.

سه اشتباه دیگر که در پروژه‌های بزرگ دیده‌ام: نبود پیشوند در توابع سفارشی (خطای redeclare در افزونه‌های دیگر — اشتباهات رایج کدنویسی)، فراخوانی تابع در حلقه بدون کش (الگوی N+1 — بهینه‌سازی کوئری‌ها)، و نبود مستندسازی PHPDoc برای توابع سفارشی (کد ناخوانا در بازبینی — استانداردها در پروژه). تفاوت بین توسعه‌دهندهٔ متوسط و حرفه‌ای در همین جزئیات کوچک است.

فهرست توابع ضروری وردپرس، در یازده دسته ارائه شد: داده، متادیتا، گزینه‌ها، کاربر و دسترسی، تاکسونومی، URL، کوئری، امنیت، ترجمه، هوک، asset، و توابع کمکی. تسلط بر این فهرست، سرعت و کیفیت کد را در پروژه‌های واقعی چند برابر می‌کند. اگر امروز یک کار در این مسیر انجام می‌دهید: یکی از فایل‌های افزونه یا قالب فعلی خود را باز کنید و ببینید کدام بخش‌ها با تابع هستهٔ وردپرس جایگزین‌شدنی هستند؛ هر جایگزینی، یک خط کد کمتر و یک لایهٔ استاندارد بیشتر است. اگر تجربه‌ای از یک تابع وردپرس دارید که مدتی برای پیدا کردنش وقت گذاشته‌اید، در دیدگاه‌ها بنویسید؛ همان گزارش‌های واقعی، این فهرست را برای توسعه‌دهندهٔ بعدی دقیق‌تر می‌کند. 🧰