تعداد بازدید: 2278

فراخوانی قالب فایل در وردپرس

راه های متفاوتی برای فراخوانی فایل در وردپرس وجود دارد.قبل از هر چیز به دو تعریف زیر توجه کنید :

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 می شوند.

به طور یک تعریف نادقیق همان طور که در معماری وردپرس خواندیم یک سری قالب پیش فرض داریم که شئ در آن جاری است. این قالب بندی پوسته ها توسط ما هم پیروی از همین عملکرد وردپرس می باشد که قالب تعیین می کنیم و شئ به آن می فرستیم و در مکان های مختلف فراخوانی می کنیم.

مطالب مشابه

آموزش نکات و تکنیک های برنامه نویسی وردپرس

query_vars در وردپرس

در این مقاله قصد داریم تا در رابطه با query_vars یا همان متغیر های نهان در url صحبت کنیم.اگر شما از ساختار ساده در...

Product Type در ووکامرس

در ووکامرس مفهومی با هویت Taxonomy با نام product_type داریم که term های متفاوتی را دارا می باشد به طور مثال simple ,...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Administration Menus در وردپرس

برای پیاده سازی پنل های شخصی در محیط ادمین وردپرس نیاز هست که یک منو به همراه یک صفحه در وردپرس ایجاد کنیم. هر منو که...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای فراخوانی قالب فایل در وردپرس

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *