دیروز مشغول کار روی یک قالب جدید بودم و متوجه شدم لازم است در پنل قالبم یک فیلد کشویی قرار بدهم تا کاربر بتواند از بین همه صفحاتی که منتشر کرده، یکی را انتخاب کند. بنابراین باید آرایهای تهیه میکردم که همه صفحات کاربر را جمعآوری کند تا بتوانم آنها را در گزینههای پنل نشان دهم. در ادامه، راهنمایی آماده کردهام که چطور آرایهای از صفحات وردپرس تهیه کنید و همچنین چطور یک لیست کشویی از صفحات بسازید.
راهنمای مطالعه:
ساخت آرایهای از صفحات
در کد زیر میتوانید ببینید چطور این کار انجام میشود. این قطعه کد لیستی از صفحات شما را جمعآوری کرده و در متغیر $pages_array ذخیره میکند تا بعداً بتوانید در حلقه از آن استفاده کنید. درست است که تابع get_pages خودش آرایه برمیگرداند اما هدف این قطعه، ساخت یک آرایه انجمنی سادهتر است که کلیدها شناسه صفحه و مقدارها عنوان صفحه باشند.
$pages_array = array( 'Choose A Page' );
$get_pages = get_pages( 'hide_empty=0' );
foreach ( $get_pages as $page ) {
$pages_array[$page->ID] = esc_attr( $page->post_title );
}
حالا یک آرایه انجمنی از صفحات دارید که خیلی راحت میتوانید روی آن حلقه بزنید یا به صورت متغیر سراسری ذخیرهاش کنید یا هر کاری که نیاز دارید انجام دهید.
ساخت فیلد لیست کشویی صفحات
برای ایجاد یک فیلد کشویی که کاربر بتواند از طریق فرم یک صفحه را انتخاب کند، میتوانید با استفاده از آرایه صفحات (که در بخش قبل اشاره شد) یک حلقه بنویسید. اما وردپرس از نسخه ۲.۱ به بعد تابعی داخلی دارد که با نام wp_dropdown_pages شناخته میشود و با پارامترهای مختلف به راحتی میتواند یک فیلد کشویی صفحه بسازد. نمونه استفاده از آن را در کد زیر مشاهده میکنید:
wp_dropdown_pages( array(
'child_of' => 0,
'sort_order' => 'ASC',
'sort_column' => 'post_title',
'hierarchical' => 1,
'post_type' => 'page'
) );
برای اطلاعات بیشتر درباره wp_dropdown_pages به راهنمای وردپرس مراجعه کنید.
نکات تکمیلی برای تهیه آرایه صفحات
برای مدیریت پیشرفتهتر صفحات، میتوانید پارامترهای بیشتری را هنگام استفاده از تابع get_pages به کار ببرید. به عنوان مثال، میتوانید صفحات را براساس یک پارامتر خاص (مثل نویسنده، وضعیت انتشار یا ترتیب نمایش) فیلتر کنید:
$args = array(
'sort_order' => 'asc',
'sort_column' => 'post_title',
'post_status' => 'publish',
'author' => 1, // فقط صفحات کاربر با شناسه ۱
);
$pages = get_pages($args);
همچنین اگر محتوای بیشتری نیاز دارید (مثل slug یا excerpt هر صفحه)، میتوانید از همان آرایه اولیه استفاده کرده و اطلاعات اضافی را در آرایه خروجی بگنجانید.
سفارشیسازی فیلد کشویی
تابع wp_dropdown_pages پارامترهای متنوعی برای سفارشیسازی دارد؛ مثلاً میتوانید با پارامتر show_option_none یک گزینه ابتدایی با متن دلخواه اضافه کنید یا با selected یک صفحه را به صورت پیشفرض انتخاب شده قرار دهید.
wp_dropdown_pages(array(
'name' => 'my_page_selector',
'selected' => 42, // صفحه انتخابشده پیشفرض
'show_option_none' => __('یک صفحه انتخاب کنید'),
'depth' => 2, // نمایش حداکثر دو سطح سلسلهمراتبی
));
این روش به شما اجازه میدهد فرمهای کاربرپسندتر بسازید و کنترل بیشتری بر ظاهر و رفتار فیلد کشویی داشته باشید.
نمایش سلسلهمراتبی صفحات
چنانچه سایت شما ساختار سلسلهمراتبی (والد/فرزند) دارد، فیلد کشویی صفحات نیز میتواند این ساختار را نمایش دهد. وردپرس به طور خودکار صفحات فرزند را با تو رفتگی (indent) نشان میدهد تا تشخیص والد و فرزند آسانتر شود.
نمونه عملی برای توسعهدهندگان
فرض کنید میخواهید در بخش سفارشیسازی قالب (Theme Customizer) یا صفحه تنظیمات افزونه یک فیلد کشویی صفحات داشته باشید. کافی است از کد زیر بهره بگیرید:
<form method="post">
<label for="your_page">یک صفحه انتخاب کنید:</label>
<?php
wp_dropdown_pages(array(
'name' => 'your_page',
'id' => 'your_page',
'show_option_none' => 'انتخاب نشده',
'option_none_value' => '0',
'selected' => get_option('your_page_option'),
));
?>
<input type="submit" value="ذخیره">
</form>
با این کار، انتخاب کاربر مستقیماً در دیتابیس ذخیره شده و قابل استفاده در بخشهای دیگر سایت خواهد بود.
بهترین شیوهها
- نمایش صفحات فقط با وضعیت منتشرشده (published) برای جلوگیری از سردرگمی کاربر
- استفاده از کلیدهای یکتا (ID) به عنوان مقدار فیلد، که بعداً بازیابی و پردازش آن آسانتر است
- افزودن توضیح کوتاه برای انتخابگر کشویی، مخصوصاً اگر سایت صفحات زیادی دارد
- در صورت نیاز به نمایش سلسلهمراتب، از پارامتر
depthبهره ببرید
جمع بندی
در این مقاله دیدیم چطور میتوان با کمک PHP و تابعهای داخلی وردپرس، لیست صفحات سایت را دریافت کرد، آن را به یک آرایهی قابل استفاده تبدیل نمود و در نهایت از دل آن یک منوی کشویی (select) تمیز و داینامیک ساخت. حالا هر جا در قالب یا پنل تنظیماتتان لازم باشد کاربر از بین صفحات یکی را انتخاب کند، یک قطعه کد آماده و قابلاعتماد در اختیار دارید.

دیدگاه و پرسش