ویژگی تصویر

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

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

تابع get_terms() یکی از توابع کلیدی برای بازیابی ترم‌ها (terms) از یک یا چند taxonomy در وردپرس است. این تابع انعطاف‌پذیر بوده و برای نمایش دسته‌بندی‌ها، برچسب‌ها، یا taxonomy سفارشی در قالب، ابزارک یا کوئری‌های پیچیده بسیار کاربرد دارد. در ادامه به صورت جامع پارامترها، مثال‌ها، بهینه‌سازی‌ها و کاربردهای رایج را بررسی می‌کنیم.

مفهوم پایه‌ای و تفاوت با توابع دیگر

get_terms() فقط ترم‌ها را برمی‌گرداند (آرایه‌ای از WP_Term). اگر بخواهید پست‌ها را بر اساس ترم‌ها دریافت کنید، باید از WP_Query یا توابع مرتبط استفاده کنید. get_terms() از کلاس WP_Term_Query داخلی استفاده می‌کند و پارامترهای متعددی برای فیلتر و فرمت خروجی دارد.

پارامترهای مهم و رایج

در اینجا جدول خلاصه پارامترهای پرکاربرد آورده شده است:

پارامترتوضیح
taxonomyنام taxonomy یا آرایه‌ای از taxonomyها (مثل ‘category’، ‘post_tag’ یا ‘genre’)
hide_emptyاگر true باشد، فقط ترم‌هایی که حداقل یک آیتم دارند نمایش داده می‌شوند (پیش‌فرض true)
fieldsقالب خروجی: ‘all’، ‘ids’، ‘names’، ‘count’، ‘id=>parent’ و غیره
orderby / orderمرتب‌سازی (‘name’,’count’,’term_id’ و غیره) و جهت ASC/DSC
number / offsetمحدود کردن تعداد و جابجایی نتایج
include / excludeشامل یا حذف آی‌دی‌های مشخص
parent / child_ofفیلتر از روی والد یا بچه‌ها در ساختار سلسله‌مراتبی
meta_queryفیلتر بر اساس متا ترم (از وردپرس 4.6 به بعد)
pad_countsاگر true باشد، شمارش‌ها شامل آیتم‌های فرزند هم می‌شود

مثال پایه: گرفتن همه دسته‌ها

$categories = get_terms( array(
    'taxonomy'   => 'category',
    'hide_empty' => false,
    'orderby'    => 'name',
    'order'      => 'ASC'
) );

if ( ! is_wp_error( $categories ) ) {
    foreach ( $categories as $cat ) {
        echo '<a href="' . esc_url( get_term_link( $cat ) ) . '">' . esc_html( $cat->name ) . '</a><br>';
    }
}

توضیح: این کد همه دسته‌های سایت را (حتی اگر خالی باشند) بر اساس نام مرتب می‌کند و هر ترم را به شکل لینک نمایش می‌دهد. استفاده از is_wp_error برای اطمینان از نبود خطا ضروری است.

مثال: گرفتن ترم‌ها بر اساس taxonomy سفارشی و نمایش توضیحات

$genres = get_terms( array(
    'taxonomy'   => 'genre',
    'hide_empty' => true,
    'orderby'    => 'count',
    'order'      => 'DESC',
    'number'     => 10
) );

if ( ! is_wp_error( $genres ) ) {
    foreach ( $genres as $genre ) {
        echo '<h4>' . esc_html( $genre->name ) . ' (' . intval( $genre->count ) . ')</h4>';
        echo '<p>' . wp_kses_post( $genre->description ) . '</p>';
    }
}

توضیح: این مثال برای یک taxonomy سفارشی به نام ‘genre’ ده ترم پراستفاده را (براساس تعداد پست‌ها) برمی‌گرداند و نام، تعداد و توضیحات هر ترم را نمایش می‌دهد.

خروجی‌های مختلف با پارامتر fields

برای بهینه‌سازی می‌توان فقط شناسه‌ها یا نام‌ها را دریافت کرد تا مصرف حافظه کاهش یابد. مثال:

$term_ids = get_terms( array(
    'taxonomy'   => 'post_tag',
    'fields'     => 'ids',
    'hide_empty' => false
) ); // مقدار بازگشتی آرایه‌ای از idها است

توضیح: با استفاده از ‘fields’ => ‘ids’ فقط آرایه‌ای از شناسه ترم‌ها بازگشت داده می‌شود، که برای کوئری‌های بعدی یا مقایسه سریع مفید است و حافظه را کمتر مصرف می‌کند.

فیلتر کردن بر اساس متا ترم (meta_query)

$special_terms = get_terms( array(
    'taxonomy'   => 'product_cat',
    'hide_empty' => false,
    'meta_query' => array(
        array(
            'key'     => 'featured',
            'value'   => '1',
            'compare' => '='
        )
    )
) );

توضیح: از meta_query برای فیلتر ترم بر اساس متاهای ذخیره‌شده در جدول termmeta استفاده می‌کنیم. این امکان در مواردی که نیاز به دسته‌بندی‌های ویژه دارید بسیار کاربردی است.

بهینه‌سازی و نکات حرفه‌ای

  • برای taxonomyهای با تعداد بالا از ‘fields’ => ‘ids’ یا pagination استفاده کنید تا مصرف حافظه کاهش یابد.
  • در صفحات پر ترافیک، نتیجهٔ get_terms را با transient یا object cache ذخیره کنید تا از اجرای مکرر جلوگیری شود.
  • اگر به شمارش دقیق شامل فرزندان نیاز دارید از pad_counts => true استفاده کنید.
  • به یاد داشته باشید که get_terms ممکن است WP_Term_Query اجرا کند؛ برای دیباگ از ابزار Query Monitor استفاده کنید تا تاثیر روی عملکرد را بسنجید.

مثال پیشرفته: نمایش سلسله‌مراتبی منو دسته‌ها

$terms = get_terms( array(
    'taxonomy'   => 'category',
    'hide_empty' => false,
    'parent'     => 0,
    'orderby'    => 'name'
) );

if ( ! is_wp_error( $terms ) ) {
    echo '<ul>';
    foreach ( $terms as $term ) {
        echo '<li>' . esc_html( $term->name );
        $children = get_terms( array(
            'taxonomy'   => 'category',
            'parent'     => $term->term_id,
            'hide_empty' => false
        ) );
        if ( ! empty( $children ) && ! is_wp_error( $children ) ) {
            echo '<ul>';
            foreach ( $children as $child ) {
                echo '<li>' . esc_html( $child->name ) . '</li>';
            }
            echo '</ul>';
        }
        echo '</li>';
    }
    echo '</ul>';
}

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

نتیجه‌گیری

تابع get_terms() ابزاری قدرتمند برای کار با taxonomyها در وردپرس است. با آشنایی با پارامترها و اصول بهینه‌سازی می‌توانید انواع نمایش‌ها — از لیست ساده تا منوهای سلسله‌مراتبی و فیلترهای مبتنی بر متا — را به شکلی کارآمد پیاده‌سازی کنید. همیشه خروجی را از نظر نوع (WP_Error) بررسی کنید و برای کوئری‌های سنگین از کش و ساختار مناسب استفاده نمایید.

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

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