تابع get_post_types_by_support در وردپرس
تابع get_post_types_by_support() در وردپرس ابزاری ساده و مفید برای پیدا کردن انواع نوشته (post types) است که از یک یا چند قابلیت (supports) مشخص پشتیبانی میکنند. این تابع مخصوص توسعهدهندگان قالب و افزونه است و کمک میکند تا در زمان اجرا تصمیمگیری هوشمندانهای در مورد نمایش فیلدها، رابط کاربری یا عملیات خاص انجام دهید.
امضای تابع و پارامترها
ساختار کلی تابع به این صورت است:
get_post_types_by_support( $supports, $operator = 'and' )توضیح پارامترها:
- $supports: یک رشته یا آرایهای از کلیدهای قابلیتها (مثل ‘thumbnail’, ‘editor’, ‘excerpt’ و …).
- $operator: ‘and’ یا ‘or’. وقتی ‘and’ است، فقط آن نوع نوشتههایی بازگردانده میشوند که همه قابلیتها را دارند. وقتی ‘or’ است، نوشتههایی که حداقل یکی از قابلیتها را دارند باز میگردند.
مقادیر رایج کلیدهای پشتیبانی (Supports)
| کلید (Support) | معنی |
|---|---|
| title | پشتیبانی از عنوان |
| editor | ویرایشگر محتوای اصلی |
| thumbnail | تصویر شاخص (Featured Image) |
| excerpt | خلاصه/چکیده |
| custom-fields | فیلدهای سفارشی (custom fields) |
| comments | دیدگاهها |
| revisions | نسخههای بازبینی |
| author | نویسنده |
| page-attributes | اولویت/ترتیب و والد (برای صفحات) |
| trackbacks | تراکبک |
مثال پایهای: گرفتن انواع نوشتهای که تصویر شاخص دارند
<?php
$post_types_with_thumbnail = get_post_types_by_support( 'thumbnail' );
// نتیجه یک آرایه از اسلاگهای post type است، مثلا: array( 'post', 'page', 'product' )
در این مثال، تابع تمام انواع نوشتههایی را که هنگام ثبت، از ‘thumbnail’ پشتیبانی میکنند بازمیگرداند. معمولا شامل ‘post’ و اگر قالب/افزونهای ثبت کرده باشد ‘product’ یا CPTهای دیگر هم میشود.
مثال با چند قابلیت و استفاده از عملگر ‘and’ و ‘or’
<?php
// انواع نوشتهای که هم editor و هم thumbnail دارند
$both = get_post_types_by_support( array( 'editor', 'thumbnail' ), 'and' );
// انواع نوشتهای که یا editor یا excerpt را دارند
$either = get_post_types_by_support( array( 'editor', 'excerpt' ), 'or' );
در مثال اول فقط post typeهایی که هر دو قابلیت editor و thumbnail را دارند بازمیگردند. در مثال دوم اگر لااقل یکی از این دو قابلیت وجود داشته باشد، آن post type در خروجی خواهد بود.
کاربردهای عملی
- نمایش یا پنهان کردن فیلدهای متا در صفحه ویرایش بر اساس اینکه آن post type از قابلیت مورد نظر پشتیبانی میکند.
- ساخت تنظیمات پلاگین یا قالب که لیستی از post typeهای مناسب را به کاربر نشان میدهد (مثلا انتخاب post typeهایی که تصویر شاخص دارند برای کار با گالریها).
- بازرسی سازگاری قالب/افزونه با انواع نوشتهها هنگام فعالسازی یا آپدیت.
مثال پیشرفته: ساخت یک منوی کشویی در تنظیمات که فقط post typeهایی با تصویر شاخص را نشان میدهد
<?php
// داخل صفحه تنظیمات یا متاباکس
$post_types = get_post_types_by_support( 'thumbnail' );
echo '<select name="my_plugin_post_type">';
foreach ( $post_types as $pt ) {
echo '<option value="' . esc_attr( $pt ) . '">' . esc_html( $pt ) . '</option>';
}
echo '</select>';
این کد لیستی از post typeهایی که از تصویر شاخص پشتیبانی میکنند میسازد و در یک select نمایش میدهد. توابع sanitization مثل esc_attr و esc_html برای جلوگیری از مشکلات امنیتی مهم هستند.
نکات و بهترین شیوهها (Expert Tips)
- اگر میخواهید فقط post typeهای عمومی را بررسی کنید، معمولا بهتر است ابتدا با get_post_types( array( ‘public’ => true ) ) فیلتر کنید و سپس از
post_type_supportsیاget_post_types_by_supportاستفاده کنید تا بازدهی بهتر شود. - برای عملکرد بهتر در صفحات با کوئریهای زیاد، نتایج را کش کنید (مثلا در transient یا گزینههای ذخیرهشده) بهویژه اگر لیست post typeها به ندرت تغییر میکند.
- اگر یک post type دلخواه ثبت میکنید (register_post_type)، دقت کنید هنگام فراخوانی get_post_types_by_support تابع ممکن است هنوز قبل از register شدن اجرا شود. بنابراین از هوکهای مناسب (مثل init یا پس از ثبت post type) استفاده کنید.
- برای بررسی یک post type مشخص بهتر است از post_type_supports( $post_type, $feature ) استفاده کنید تا کنترل دقیقتری داشته باشید.
چند سناریوی متداول و راهحلها
- قصد دارید قالبی بسازید که فقط برای پستهایی با تصویر شاخص یونیفرم نمایش دهد: از get_post_types_by_support(‘thumbnail’) برای پیدا کردن post typeها و سپس اعمال قوانین قالبی استفاده کنید.
- میخواهید در یک افزونه تنها post typeهایی که قابلیت ‘custom-fields’ دارند را نمایش دهید: get_post_types_by_support(‘custom-fields’, ‘and’).
- برای پشتیبانی از افزونهای که به ویرایشگر نیاز دارد، میتوانید قبل از فعال کردن فیچرها بررسی کنید که آیا post type هدف چنین قابلیتی را دارد.
نمونه جایگزین و بهبود: بررسی با فیلتر public
<?php
// گرفتن فقط post typeهای public که thumbnail دارند
$public = get_post_types( array( 'public' => true ), 'names' );
$with_thumb = get_post_types_by_support( 'thumbnail' );
$result = array_intersect( $public, $with_thumb );
// $result حاوی اسلاگهای نوع نوشتهای است که عمومی هستند و thumbnail دارند
در این کد ابتدا فقط post typeهای عمومی دریافت میشوند، سپس با نتایج get_post_types_by_support تلاقی میکنیم تا تنها موارد عمومی و دارای thumbnail باقی بمانند. این کار معمولا در تنظیمات کاربر پسندتر است.
نکات سازگاری و هشدارها
این تابع در نسخههای جدیدتر وردپرس وجود دارد؛ اگر قصد دارید افزونهای سازگار با نسخههای قدیمیتر بسازید، بهتر است پیش از استفاده از آن وجود تابع را بررسی کنید یا از توابع معادل مانند post_type_supports و get_post_types استفاده کنید. همچنین توجه کنید که برخی post typeها ممکن است قابلیتها را به صورت دینامیک اضافه یا حذف کنند، بنابراین به ترتیب اجرای هوکها توجه کنید.
خلاصه
تابع get_post_types_by_support() یک ابزار ساده اما قدرتمند برای فیلتر کردن انواع نوشتهها بر اساس قابلیتها است. با ترکیب آن با توابع دیگر وردپرس میتوانید رابطهای مدیریتی پویا، تنظیمات هوشمند و رفتارهای شرطی در قالبها و افزونهها پیادهسازی کنید. همواره از sanitization و کش مناسب استفاده کنید و به ترتیب ثبت post typeها و اجرا در هوکهای مناسب دقت داشته باشید.
آیا این مطلب برای شما مفید بود ؟




