فراخوانی قالب فایل در وردپرس
راه های متفاوتی برای فراخوانی فایل در وردپرس وجود دارد.قبل از هر چیز به دو تعریف زیر توجه کنید :
PATH : نمایش دهنده مسیر فایل در سیستم که به شکل زیر می باشد :
/home/username/public_html/gnutec.ir/wp-content/themes/twentyseventeen/index.php
همون طور که در بالا می بینید مسیر یک فایل در هاست می باشد.هاست میشه همون سیستم عاملی که یه کاربر با نام username برای شما ساخته شده که حالا username یه نام تست هست که من میگم.
برای فراخوانی فایل هایی که میخواید include کنید می تونید از path استفاده کنید.
نکته : متغیر سراسیری TEMPLATEPATH
مسیر پوسته جاری رو در فایل تم میده.
URL : این آدرس فایل ها بر اساس پروتکل و آدرس دامنه شماست :
https://gnutec.ir/wp-content/themes/twentyseventeen/style.css
می بینید که در بالا دامنه ما gnutec.ir هست که مسیر استایل اصلی رو به ما میده. برای فراخوانی استایل ها و اسکریپت ها در زمان enqueue کردنشون از URL میشه استفاده کرد.
نکته : تابع get_template_directory_uri
مسیر پوسته جاری (پوسته ای که دارید توش از این تابع استفاده می کنید) رو میده.
تابع locate_template
از این تابع برای فراخوانی کتابخانه و یا کلاس و تابع استفاده نکنید . این تابع برای فراخوانی قالب استفاده می شه ، مثلا وسط یه شورتکد نیازه که یه فایل که دارای یه سری کدهای html هست و فراخوانی کنید.
شروع جستجو برای این تابع از ریشه دایرکتوری پوسته است ، پس برای پارامتر اول این تابع باید از ریشه دایرکتوری پوسته آدرس دهی کنید. این تابع برای توسعه پوسته ها استفاده داره چون در TEMPLATEPATH
جستجو می کنه.
<?php locate_template( $template_names, $load, $require_once ) ?>
پارامتر های ورودی این تابع :
- template_names : آرایه ای از آدرس فایل ها . شروع جستجو توسط این تابع از آدرس
TEMPLATEPATH
شروع می گردد. - load : اگر برابر با true باشد فایل مربوطه لود می شود. Default: false
- require_once : اگر برابر با true باشد فایل مربوطه به وسیله تابع require_once لود می شود. Default: true
خروجی این تابع در صورتی که فایل رو پیدا کرده باشه رشته ای است حاوی مسیر فایل مربوطه و در صورت این که فایل پیدا نشود رشته خالی رو برمی گردونه.
مثال :
$templates = array( 'templates/loop.php', 'template-parts/footer/info.php' ); $result = locate_template($templates);
این تابع در ابتدا به دنبال آدرس TEMPLATEPATH/templates/loop.php
می گردد. (منظور از قرار دادن TEMPLATEPATH در ابتدا آدرس ریشه پوسته است)اگر پیدا نکرد بعد به دنبال آدرس TEMPLATEPATH/template-parts/footer/info.php
می گرده و در صورتی که هر کدوم رو از ابتدا پیدا کرد آدرس رو برمی گردونه و در صورتی که هیچ کدوم رو پیدا نکرد هم رشته خالی برمی گردونه.
پس دقت داشته باشید تنهای یک آدرس برمی گردونه.
تابع get_template_part
این تابع بسیار پرکاربرد برای فراخوانی فایل ها در پوسته می باشد. مزیتی که نسبت به فراخوانی مستقیم دارد این است که Query Variables رو هم فراخوانی می کنه. این تابع در درون خودش از locate_template
استفاده می کنه بنابراین شروع جستجو از ریشه پوسته (TEMPLATEPATH
) خواهد بود.
نکته : همون طور که گفتیم شروع آدرس دهی در این تابع از ریشه خواهد بود . پس شما در هر جایی (هر دایرکتوری) که این تابع رو فراخوانی کنید شروع آدرس دهی رو ریشه تم بدونید.
<?php get_template_part( string $slug, string $name = null ); ?>
پارامتر های ورودی این تابع :
- slug : آدرس عمومی فایل به همراه نامک اون. اگر فایل site-info.php رو در نظر بگیرید site میشه نامک و info میشه نام.
- name : نام فایل .
خروجی این تابع true یا false در صورت فراخوانی و نیافتن فایل خواهد بود.
مثال :
<?php get_template_part("templates/single","meta");
در تابع بالا فایل با آدرس TEMPLATEPATH/templates/single-meta.php
را فراخوانی می کند.
نکته : ما قبل از فراخوانی فایل می تونیم یه پارامتر هم باهاش ارسال کنیم و در فایل فراخوانی شده با توجه به مقدار پارامتر رفتار متفاوتی داشته باشیم.
برای ارسال پارامتر از تابع set_query_var و برای دریافت پارامتر از تابع get_query_var استفاده می کنیم.
مثال :
<?php set_query_var('header','fixed'); get_template_part("templates/single","meta");
با ثبت متغیر header با مقدار fixed در فایل single-meta.php می تونیم این متغیر رو بگیریم و با توجه به مقدارش رفتار متفاوتی داشته باشیم. بدین ترتیب در تعداد فایل ها صرفه جویی می کنیم.
<?php $header = get_query_var('header'); if($header == 'fixed'){ //do something }else{ //do other }
Template Overriding در پلاگین ها
خوب اگر در پلاگین خودمون خواستیم یه Template Overriding داشته باشیم یعنی ابتدا به دنبال قالب در پوسته بگرده و بعد در قالب های پوسته باید از توابع زیر استفاده کنیم.
<?php define(PLUGIN_PATH, plugin_dir_path(__FILE__)); function custom_locate_template($template_name, $template_path, $default_template) { if (!$template_path) $template_path = "pluginsName/"; if (!$default_path) $default_path = PLUGIN_PATH . "templates/"; $template = locate_template(array($template_path . $template_name, $template_name)); if (empty($template)) $template = $default_path . $template_name; return apply_filters("custom_locate_template", $template, $template_name, $template_path, $default_path); } function custom_get_template($template_name, $args = "", $template_path = "", $default_path = "") { if (is_array($args) and isset($args)) extract($args); $template_file = custom_locate_template($template_name, $template_path, $default_path); if (!file_exists($template_file)): error_log("File with name of {$template_file} is not exist"); return; endif; include $template_file; }
خوب باید یک پوشه در ریشه دایرکتوری پلاگین با نام templates درست کنیم و فایل های خودمون که قراره فراخوانی بشه رو در اون قرار بدیم و کسی که داره از پلاگین استفاده می کنه هم باید یه پوشه همنام با پلاگین ما بسازه و در ریشه دایرکتوری پوسته قرار بده تا بتونه فایل های templates رو با همون نام override کنه.
فراخوانی فایل ها باید با تابع custom_get_template
باشه. به طوری نام فایل رو به همراه پارامترهایی که قراره اونجا استفاده بشه بهش می دیم و اون رو در روال خودمون فراخوانی می کنیم.
مثالی از فراخوانی یک فایل در مثلا یک شورتکد :
function rng_shortcode_name() { ob_start(); $args = array( 'param' => 'value' ); custom_get_template("file.php",$args); $outpout = ob_get_clean(); return $outpout; } add_shortcode( 'shortcode_slug', 'rng_shortcode_name' );
- مکان فراخوانی این تابع هم باید از جایی باشه که فرانت اند بالا اومده باشه(مثلا توی شورتکد).
- از این تابع برای فراخوانی کتابخانه ها و توابع استفاده نکنید.
- پارامتر های
$args
به صورت آرایه اگر باشند در فایل فراخوان extract می شوند.
به طور یک تعریف نادقیق همان طور که در معماری وردپرس خواندیم یک سری قالب پیش فرض داریم که شئ در آن جاری است. این قالب بندی پوسته ها توسط ما هم پیروی از همین عملکرد وردپرس می باشد که قالب تعیین می کنیم و شئ به آن می فرستیم و در مکان های مختلف فراخوانی می کنیم.
دیدگاهتان را بنویسید