ویژگی تصویر

آموزش تابع get_taxonomy() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع get_taxonomy در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع get_taxonomy() در وردپرس ابزاری ساده اما بسیار کاربردی برای واکشی شیء (object) مربوط به یک تاکسونومی ثبت‌شده است. این تابع اطلاعات ساختاری و پیکربندی تاکسونومی را از آرایه‌ٔ داخلی وردپرس برمی‌گرداند و برای توسعه‌دهندگان قالب و افزونه بسیار مفید است.

چرا از get_taxonomy() استفاده کنیم؟

  • برای خواندن برچسب‌ها (labels) و تنظیمات تاکسونومی بدون دسترسی مستقیم به متغیرهای داخلی.
  • برای تصمیم‌گیری پویا در قالب یا پنل مدیریت بر اساس ویژگی‌های تاکسونومی (مثلاً hierarchical یا rewrite).
  • برای اعتبارسنجی وجود یا عدم وجود یک تاکسونومی قبل از اجرای عملیات روی آن.

نحوۀ استفاده پایه

$tax = get_taxonomy('category');

if ( $tax ) {
    echo $tax->labels->name;
} else {
    // تاکسونومی ثبت نشده است
}

توضیح: در این مثال، تابع get_taxonomy() شیء مربوط به تاکسونومی با نام «category» را برمی‌گرداند. اگر تاکسونومی وجود نداشته باشد، مقدار null بازمی‌گردد. سپس نام نمایشی تاکسونومی از طریق $tax->labels->name چاپ می‌شود.

ویژگی‌های رایج شیء WP_Taxonomy

شیء بازگشتی از get_taxonomy() از نوع WP_Taxonomy بوده و شامل چندین پراپرتی مهم است. جدول زیر مهم‌ترین آن‌ها را نشان می‌دهد:

نام پراپرتیتوضیح
nameنام تاکسونومی (مثلاً post_tag یا category)
labelsمجموعه‌ برچسب‌ها (labels) برای نمایش در رابط کاربری
hierarchicalبولی — آیا ساختار درختی دارد (مثل دسته‌بندی) یا تخت است (مثل برچسب)
publicآیا در کوئری‌های عمومی در دسترس است
show_uiنمایش در بخش مدیریت
object_typeلیستی از نوع‌های نوشته که این تاکسونومی برای آن‌ها ثبت شده
rewriteتنظیمات مربوط به بازنویسی آدرس‌ها (slug و options)
query_varنام پارامتر کوئری برای این تاکسونومی

مثال پیشرفته: نمایش لیستی از تاکسونومی‌ها با جزئیات

$taxonomies = array('category', 'post_tag', 'genre'); // مثال از تاکسونومی‌ها

foreach ( $taxonomies as $t ) {
    $tax = get_taxonomy( $t );
    if ( ! $tax ) {
        echo "تاکسونومی {$t} تعریف نشده.n";
        continue;
    }

    printf(
        "نام: %s | hierarchical: %s | object types: %sn",
        esc_html( $tax->labels->name ),
        $tax->hierarchical ? 'بله' : 'خیر',
        implode(', ', $tax->object_type )
    );
}

توضیح: این کد لیستی از نام تاکسونومی‌ها می‌گیرد، برای هر کدام get_taxonomy را اجرا می‌کند و اگر تعریف شده بود، نام نمایشی، مقدار hierarchical و نوع‌های نوشته مرتبط را نمایش می‌دهد. توجه کنید از esc_html برای خروجی امن در قالب استفاده شده است.

کاربردهای عملی و سناریوهای واقعی

  • تعیین نوع کنترل فرم در صفحه ویرایش (مثلاً اگر hierarchical باشد از درخت یا چک‌باکس استفاده شود).
  • نمایش یا پنهان کردن ستون مدیریت مرتبط با تاکسونومی با بررسی show_admin_column.
  • ساخت لینک بر اساس rewrite[‘slug’] برای ایجاد مسیرهای سفارشی در قالب.
  • ایجاد سازگاری بین افزونه‌ها؛ قبل از استفاده از متادیتا یا توابع اختصاصی، وجود تاکسونومی بررسی شود.

مثال: انتخاب ویجت یا کنترل بر اساس hierarchical

$tax = get_taxonomy('genre');

if ( $tax && $tax->hierarchical ) {
    // نمایش درختی یا dropdown مخصوص دسته‌بندی‌ها
} else {
    // نمایش لیست تگ مانند (checkboxes یا text input)
}

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

نکات امنیتی و بهینه‌سازی

  • همیشه مقدار بازگشتی get_taxonomy را چک کنید تا از خطاهای PHP جلوگیری شود.
  • برای خروجی در قالب از توابع فرانت‌اند ایمن مانند esc_html یا esc_attr استفاده کنید.
  • در صورتی که از get_taxonomy در حلقه‌های پرتکرار استفاده می‌کنید، بهتر است نتیجه را کش کنید تا فراخوانی‌های مکرر کاهش یابد.

خطاهای رایج و راه‌حل‌ها

  • برگشت null: معمولاً به این دلیل است که تاکسونومی هنوز ثبت نشده یا نام اشتباه است — بررسی کنید که register_taxonomy قبل از فراخوانی اجرا شده باشد (مثلاً روی هوک init).
  • عدم مشاهده تغییرات: اگر تنظیمات rewrite تغییر کرده‌اند، ممکن است نیاز به بازسازی پیوندهای یکتا (Permalinks) باشد.

بهترین روش: استفاده در هوک init

اگر می‌خواهید بعد از ثبت تاکسونومی از get_taxonomy استفاده کنید، اطمینان حاصل کنید که کد شما بعد از ثبت اجرا می‌شود. معمولاً بهترین محل استفاده درون هوک init با priority مناسب است.

add_action( 'init', function() {
    // ابتدا تاکسونومی را ثبت می‌کنیم
    register_taxonomy( 'genre', 'post', array(
        'label' => 'Genre',
        'hierarchical' => true,
    ) );

    // سپس از get_taxonomy استفاده می‌کنیم
    $tax = get_taxonomy( 'genre' );
    if ( $tax ) {
        // پردازش دلخواه
    }
}, 20 );

توضیح: در این کد ابتدا تاکسونومی ثبت شده و سپس با priority=20 که بعد از اولویت پیش‌فرض اجرا می‌شود، get_taxonomy فراخوانی شده تا مطمئن شویم تاکسونومی قبلاً ثبت شده است.

جمع‌بندی

تابع get_taxonomy() ابزار ساده اما کلیدی برای دسترسی به تنظیمات داخلی تاکسونومی‌ها در وردپرس است. با بررسی ویژگی‌هایی مانند labels، hierarchical، object_type و rewrite می‌توانید رفتار قالب و افزونه را به‌صورت پویا کنترل کنید. همواره نتایج را اعتبارسنجی کرده و در خروجی‌ها از توابع ایمن‌سازی استفاده کنید تا هم عملکرد بهینه و هم امنیت حفظ شود.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: