سفارشی ساز تم: شرایط، تم های کودک و افزونه ها
تا کنون دیدهایم که مدیریت گزینههای تم با استفاده از Theme Customizer Boilerplate و قلابهای آن چقدر ساده است. همانطور که احتمالاً به خاطر دارید، مهمترین مرحله اتصال به قلاب فیلتر ‘thsp_cbp_options_array’ و ارسال آن به آرایهای از گزینههایی بود که میخواهید در طرح زمینه خود استفاده کنید.
مطمئنم که شما از قبل با قلابهای اکشن و فیلتر وردپرس – API پلاگین – و نحوه کار آنها آشنا هستید، اما در هر صورت، در اینجا یک جمعبندی سریع (استفاده از قلابهای فیلتر به عنوان مثال) وجود دارد. می توانید تابع سفارشی خود را تعریف کرده و با استفاده از تابع add_filter:
آن را به فیلتر موجود متصل کنید
add_filter($tag, $function_to_add, $priority, $accepted_args );
بیایید بر استدلال اولویت تمرکز کنیم. مقدار پیشفرض آن 10 است، بنابراین اگر از عدد دیگری استفاده نمیکنید، اولویت اجرای تابع شما همین خواهد بود. تعداد را کم کنید، عملکرد شما زودتر اجرا می شود. بنابراین اگر کاری شبیه به این انجام دهید:
// افزودن اولین پیام
تابع my_theme_add_first_message ( $content ) {
$content .= 'اولین پیام
';
بازگشت محتوای $;
}
add_filter('the_content', 'my_theme_add_first_message', 1 );
// افزودن پیام دوم
تابع my_theme_add_second_message ($content ) {
$content .= 'پیام دوم
';
بازگشت محتوای $;
}
add_filter('the_content', 'my_theme_add_second_message', 2 );
وقتی تابع the_content را در single.php یا هر قالب دیگری فراخوانی میکنید، محتوای پست الگو نشان داده میشود و به دنبال آن First Message و سپس Second Message نمایش داده میشود. نه به این دلیل که ترتیب آنها در این قطعه کد است، بلکه به دلیل پارامتر اولویت اجرا. قلابها را طوری در نظر بگیرید که انگار گلولههای برفی هستند که از تپه میغلتند و همه چیز را در راه خود میچینند.
این مورد چگونه برای Theme Customizer Boilerplate اعمال میشود؟
میتوانید با استفاده از یک تابع سفارشی (مثلاً my_theme_options_array) با مقدار اولویت 1 به ‘thsp_cbp_options_array’ از فایل function.php تم خود متصل شوید. این به معنای هر تابع دیگری است که به ‘thsp_cbp_options_array’ این کار را پس از عملکرد my_theme_options_array که قبلاً تعریف کردید انجام می دهد. به این مثال نگاه کنید:
function my_theme_options_array() {
// استفاده از تابع helper برای دریافت قابلیت پیش فرض مورد نیاز
$thsp_cbp_capability = thsp_cbp_capability();
$options = آرایه(
// شناسه بخش
'my_theme_new_section' => آرایه(
'existing_section' => نادرست،
'args' => آرایه(
'title' => __( 'بخش جدید'، 'my_theme_textdomain')،
'اولویت' => 10
)
'fields' => آرایه(
/*
* میدان رادیویی
*/
'my_radio_button' => آرایه(
'setting_args' => آرایه(
'default' => 'گزینه-2',
'type' => 'گزینه',
'capability' => $thsp_cbp_capability،
'transport' => 'Refresh',
)
'control_args' => آرایه(
'label' => __( 'دکمه رادیویی من'، 'my_theme_textdomain')،
'type' => 'رادیو'، // کنترل رادیویی
'انتخابها' => آرایه(
'option-1' => آرایه(
'label' => __( 'گزینه 1'، 'my_theme_textdomain')
)
'option-2' => آرایه(
'label' => __( 'گزینه 2'، 'my_theme_textdomain')
)
'option-3' => آرایه(
'label' => __( 'گزینه 3'، 'my_theme_textdomain')
)
)
'اولویت' => 3
)
)
)
)
)
بازگشت گزینه های $;
}
add_filter('thsp_cbp_options_array', 'my_theme_options_array', 1 );
این بخش جدیدی را با یک فیلد به نام My Radio Button به Theme Customizer اضافه میکند. سپس شما یا شخص دیگری یک طرح زمینه کودک برای طرح زمینه خود ایجاد می کنید و تصمیم می گیرید که بخش جدید را حفظ کنید، اما به جای دکمه رادیویی من، شاید بهتر باشد My Checkbox را داشته باشید. آسان:
function my_child_theme_options_array( $options ) {
// استفاده از تابع helper برای دریافت قابلیت پیش فرض مورد نیاز
$thsp_cbp_capability = thsp_cbp_capability();
/*
* این بار، ما فقط فیلدهای my_theme_new_section را در آرایه $options ویرایش می کنیم
*/
$options['my_theme_new_section']['fields'] = آرایه(
'my_checkbox_field' => آرایه(
'setting_args' => آرایه(
'پیش فرض' => درست،
'type' => 'گزینه',
'capability' => $thsp_cbp_capability،
'transport' => 'Refresh',
)
'control_args' => آرایه(
'label' => __( 'چک باکس من'، 'my_theme_textdomain')،
'type' => 'checkbox', // کنترل فیلد چک باکس
'اولویت' => 2
)
)
)
بازگشت گزینه های $;
}
add_filter('thsp_cbp_options_array', 'my_child_theme_options_array', 2 );
توجه کردید که پارامتر $options را به my_theme_options_array ارسال نکردم و آن را در تابع my_child_theme_options_array انجام دادم؟ دلیلش این است که وقتی برای اولین بار به قلاب ‘thsp_cbp_options_array’ متصل شدم، میخواستم گزینههای نمونه Theme Customizer Boilerplate را نادیده بگیرم. سپس، وقتی دوباره از طرح زمینه فرزندم وارد آن شدم، نمیخواستم گزینههای طرح زمینه والدین را کاملاً حذف کنم، فقط کمی آنها را ویرایش کنم. به همین دلیل است که من فقط با $options[‘my_theme_new_section’][‘fields’] سر و کار دارم، نه کل آرایه $options.
البته، میتوانید بیش از یکبار از قالب اصلی خود به قلاب فیلتر ‘thsp_cbp_options_array’ متصل شوید. فرض کنید ویژگیهای قلمرو پلاگین را به طرح زمینه خود اضافه نکنید و به افزونهها اجازه دهید این کار را انجام دهند. آنچه آنها قرار است انجام دهند. اکنون میخواهید برخی از گزینههای Theme Customizer را فقط در صورت فعال بودن یک افزونه خاص نشان دهید. باز هم آسان است:
function my_plugin_dependency_options_array( $options ) {
// استفاده از تابع helper برای دریافت قابلیت پیش فرض مورد نیاز
$thsp_cbp_capability = thsp_cbp_capability();
/*
* فقط در صورتی که "test-plugin.php" فعال باشد my_plugin_dependency_section را اضافه کنید
*/
if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
$options['my_plugin_dependency_section'] = آرایه(
'existing_section' => نادرست،
'args' => آرایه(
'title' => __( 'وابستگی به افزونه'، 'my_theme_textdomain')،
'اولویت' => 10
)
'fields' => آرایه(
/*
* فیلد متنی
*/
// شناسه فیلد
'new_text_field' => آرایه(
'setting_args' => آرایه(
'default' => __( '', 'my_theme_textdomain' ),
'type' => 'گزینه',
'capability' => $thsp_cbp_capability،
'transport' => 'Refresh',
)
'control_args' => آرایه(
'label' => __( 'فقط نشان می دهد اگر'، 'my_theme_textdomain')،
'type' => 'text'، // کنترل فیلد متن
'اولویت' => 5
)
)
)
)
}
بازگشت گزینه های $;
}
add_filter('thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );
میخواهید یک افزونه عملکرد اصلی ایجاد کنید برای استفاده از طرح زمینه (آنطور که باید)؟ میتوانید از یکی از فایلهای افزونه خود نیز به “thsp_cbp_options_array” متصل شوید، به همان روشی که از فایل function.php یک تم انجام میدهید.
گزینه دیوانه نشو
هر بار که گزینههایی را به موضوعی که ایجاد میکنید اضافه میکنید، باید یکی از اصول اصلی وردپرس – تصمیم نه گزینهها – را در ذهن داشته باشید. به راحتی میتوانید از خود دور شوید و شروع به اضافه کردن گزینههای کاربر برای هر جزئیات جزئی تم خود کنید، اما این به هیچکس کمک نمیکند. امیدوارم این چند ترفند، بهویژه افزودن گزینههای وابسته به افزونه، کمک کند تا تعداد گزینههای تم شما تا حد امکان کم باشد.
بالاخره، اگر طرح زمینه شما برای مواردی مانند هر شعاع مرزی هر عنصر گزینههایی دارد، یک طرح زمینه نیست، یک ویرایشگر WYSIWYG است و احتمالاً یک طرح زمینه عالی نیست.
شما یک پیراهن سفید نمیخرید زیرا با کمی تلاش بیشتر میتوانید آن را به یک رومیزی تبدیل کنید، بلکه آن را میخرید زیرا «سفیدی» آن را دوست دارید. قالب های وردپرس هم باید همینطور باشند، باید مطالب را به روشی خاص ارائه کنند، نه اینکه سعی کنند هر کاری را به هر شکلی که بتوان تصور کرد انجام داد. اگر یک توسعهدهنده تم هستید، وظیفه شماست که مطمئن شوید انتظارات کاربر همان چیزی است که باید باشد.