لینک کردن فایل های قالب وردپرس – مقدمه
یکی از مهم ترین و پایه ای ترین مفاهیم در طراحی قالب وردپرس، لینک کردن فایل های قالب وردپرس برای فراخوانی آن ها در بخش های مختلف قالب می باشد.
همان طور که در بخش های قبل تر نیز صحبت شد، یک قالب وردپرس از بخش های مختلفی با نام Template Files ساخته شده است که فراخوانی این Template Files در فایل های اصلی قالب وردپرس، باعث می گردد تا سایت شما با توجه به اولیت های موجود در ساختار سلسه مراتبی وردپرس ، به درستی به نمایش دربیاید.
شما در بخش های مختلف طراحی خود، نیاز به لینک کردن فایل های قالب وردپرس و فراخوانی آنها در فایل های مختلف قالب خود دارید.
در این قسمت از آموزش های طراحی قالب وردپرس، با روش های لینک کردن فایل های قالب وردپرس و دایرکتوری ها خواهیم پرداخت و بررسی می کنیم که برای فراخوانی بخش های مختلف قالب وردپرس، به چه صورت باید Template Files را در وردپرس فراخوانی کنیم و از آن ها در بخش مختلف قالب خود استفاده نماییم.
لینک کردن فایل های قالب وردپرس به فایل های اصلی هسته قالب وردپرس
همانگونه که در بخش های قبلی آشنا شدید، قالب های وردپرس از تعداد مختلفی از Template File ها ساخته شده است. در کمترین حالت، یک قالب بطور عمومی شامل فایل های sidebar.php و header.php و footer.php می باشد.
برای فراخوانی این سه فایل در فایل های موجود در قالب و لینک کردن این فایل ها به سایر فایل های قالب وردپرس، شما می توانید از Template Tags زیر استفاده کنید:
در واقع اگر شما بخواهید در یک فایل خود، فایل header.php را فراخوانی کنید، تنها کافی است تا از تابع get_header استفاده نمایید.
در بسیاری از شرایط، ممکن است نیاز داشته باشید تا از چندین هدر یا فوتر یا سایدبار در سایت خود بهره بگیرید. در اینگونه از موارد لازم خواهد بود تا شما چندین ورژن مختلف از فایل ها هدر و فوتر وسایدبار را در قالب خود ایجاد کنید.
نام این فایل های سفارشی اصولا به صورتی شبیه sidebar-{your_custom_template}.php و header-{your_custom_template}.php و footer-{your_custom_template}.php می باشد. در اینگونه موارد برای لینک کردن فایل های قالب وردپرس خود با این فایل های سفارشی، کافی است تا نام آن را بصورت زیر و با استفاده از template tag ها، فراخوانی کنید:
get_header( 'your_custom_template' ); get_footer( 'your_custom_template' ); get_sidebar( 'your_custom_template' );
لینک کردن فایل های قالب وردپرس به سایر فایل های موجود در قالب
همانگونه که می دانید، وردپرس با سرهم کردن تعداد زیادی از فایل ها که در قالب وردپرس وجود دارد، صفحات مختلف سایت شما را تولید کرده و می سازد.
مسلما به غیر از فایل های استاندارد موجود در قالب وردپرس (مانند فایل های هدر و فوتر و سایدبار)، شما ممکن است فایل های مختلفی را در قالب وردپرس خود اضافه کنید تا به امکانات قالب وردپرس خود بیافزایید.
شما می توانید انواع فایل های سفارشی یا همان custom template files را در قالب خود ایجاد نمایید و سپس در هرجایی که به آن ها نیاز داشتید، آن ها توسط تابع get_template_file فراخوانی نمایید.
برای نامگذاری فایل های ساخته شده قالب توسط خودتان، می توانید اسم مورد نظر خود را که بیانگر کارکرد آن فایل در قالب شما می باشد، بر روی فایل قرار داده و در نام گذاری خود از همان سیستم نام گذاری قالب های سفارشی (همانند آنچه برای هدر و فوتر و سایدبار و سایر قسمت های استاندارد پیاده می کنید) استفاده نمایید:
slug-template.php
فرض کنید که شما می خواهید یک custom template برای مدیریت محتوای پست های خود بسازید. برای این منظور می توانید از نام content.php برای فایل خود بهره بگیرید. حال فرض کنید که می خواهید کارایی این قالب سفارشی را خاص تر نمایید و می خواهید و مثلا چیدمان یا layout خاصی برای بخش محتوای محصول داشته باشید. در این صورت اسم خود را خاص تر انتخاب کرده و از نامگذاری content-product.php استفاده می کنید. در صورتی که این فایل در دایرکتوری اصلی قالب شما قرار داشته باشد، برای فراخوانی این فایل می توانید به روش زیر اقدام نمایید:
get_template_part( 'content', 'product' );
ممکن است تصمیم بگیرید تا ساختار منظم تری را در قالب خود اعمال کنید و کلیه بخش های مربوط به بخش سفارشی محتوا را، در یک دایرکتوری جداگانه قرار دهید. به عنوان مثال فرض کنید علاوه بر بخش محتوای محصول، شما می خواهید layout های جداگانه برای محتوای profiles و همین طور location داشته باشید.
در این صورت بهتر است که به جای شلوغ کردن دایرکتوری اصلی قالب وردپرس، فایل های مربوط به هر بخش را بطور جداگانه دسته بندی کرده و آن ها در یک دایرکتوری جداگانه قرار دهیم. به عنوان مثال فرض کنید برای بخش سفارشی content یک فولدر جداگانه با نام content-template ایجاد می کنیم و فایل های content-location.php و content-product.php و content-profile.php را در داخل آن قرار می دهیم.
در این صورت اگر مثلا نام قالب وردپرس شما msn-theme باشد، ساختار داخل آن چیزی شبیه زیر خواهد بود:
themes (dir) - msn-theme (dir) - content-templates (dir) - content-location.php - content-product.php - content-profile.php - style.css - page.php ...
در این صورت برای include کردن فایل های مورد نظر (یا همان لینک کردن فایل های قالب وردپرس به این فایل ها و دایرکتوری جدید)، کافی است تا از تابع get_template_part با دو آرگومان ورودی استفاد کنیم که برای آرگومان اول، نام دایرکتوری شامل این فایل ها را به ابتدای نام فایل خود اضافه می کنم و برای آرگومان دوم، بخش بعد از – را مطابق زیر، به تابع ارسال خواهیم کرد.
get_template_part( 'content-templates/content', 'location' ); get_template_part( 'content-templates/content', 'product' ); get_template_part( 'content-templates/content', 'profile' );
لینک کردن فایل های قالب وردپرس به دایرکتوری های قالب وردپرس
برای لینک کردن دایرکتوری های قالب خود، شما می توانید از تابع زیر استفاده نمایید:
در صورتی که شما از child theme استفاده نکنید، این تابع URI کامل فولدر اصلی قالب شما را باز می گرداند. بنابراین اگر بخواهید مثلا به یکی از فایل های داخل ساب فولدرهای قالب خود دسترسی داشته باشید، کافی است تا از فرمت زیر استفاده کنید:
echo get_theme_file_uri( 'images/logo.png' );
در صورتی که شما از یک پوسته فرزند یا همان child theme استفاده کنید، این تابع URI مربوط به child theme را در صورت وجود، به شما باز خواهد گرداند. اما در صورتی که نتواند پوسته فرزند مورد نظر را بیابد، در آن صورت این تابع URI مربوط به پوسته اصلی یا همان parent theme را باز خواهد گرداند.
این نکته بسیار نکته مهمی خواهد بود که در بین کدهای خود، همواره در نظر بگیرید که آیا پوسته اصلی فعال است یا پوسته فرزند چرا که در صورت درست استفاده نکردن از این تابع، ممکن است قالب شما چیزی دور از انتظار شما را به نمایش دربیاورد و یا بطور کلی از کار بیافتد.
برای دسترسی به مسیر فایل ها در وردپرس و استفاده از آن ها در بین کدهای خود، شما می باید از تابع زیر استفاده نمایید:
دقیقا مشابه تابع get_theme_file_uri ، تابع get_theme_file_path نیز در صورتی که پوسته فرزند موجود و فعال باشد، مسیر دایرکتوری پوسته فرزند را به شما باز می گرداند. حال در صورتی که این فایل در child theme موجود باشد، وردپرس آن را باز خواهد گرداند اما در غیر این صورت، مسیر فایل موجود در parent theme را باز می گرداند.
در صورتی که بخواهید درون فایل های child theme خود، فایل های قالب اصلی یا parent theme را فراخوانی کنید و یا نیاز به یک URI در parent theme داشته باشید، کافی است از تابع های زیر استفاده نمایید:
برای لینک کردن فایل های قالب وردپرس، می توانید با استفاده از این توابع می توانید فایل های یا دایرکتوری های خود را به مسیر ها یا URI های دلخواه، لینک نمایید:
echo get_parent_theme_file_uri( 'images/logo.png' ); //or echo get_parent_theme_file_path( 'images/logo.png' );
همواره باید مراقب مسیردهی داده شده توسط خود باشید، چرا که اگر فایل یا مسیر یا URI مورد نظر در قالب شما وجود نداشته باشد، خروجی این توابع مسلما broken link خواهد بود و این می تواند باعث مشکلات فراوان در سایت وردپرسی شما گردد.
معرفی توابع جدید از ورژن ۴.۷ وردپرس به بعد
تابع های get_theme_file_uri و get_theme_file_path و get_parent_theme_file_uri و get_parent_theme_file_path از ورژن ۴.۷ به بعد وردپرس معرفی شده اند.
برای ورژن های قدیمی تر وردپرس، شما باید از توابع get_template_directory_uri و get_template_directory و get_stylesheet_directory_uri و get_stylesheet_directory استفاده نمایید.
در نظر داشته باشید که توابع قدیمی تر برای حفظ فرآیند سازگاری با ورژن های قدیمی تر، همواره حفظ می شوند اما بهتر است که به جای استفاده از آن ها، از تابع های جدید تر برای توسعه قالب های خود استفاده نمایید.
استفاده از لینک کردن فایل ها بصورت داینامیک در قالب های وردپرس
جدا از نحوه تنظیمات permalink ها در پنل ادمین سایت وردپرس شما، شما می توانید با استفاده از dynamic linking صفحات یا پست های خود را بصورت داینامیک در بین کدهای خود فراخوانی کنید.
برای فراخوانی پست ها یا صفحات خود به صورت داینامیک کافی است که از تابع get_permalink استفاده کرده و ID عددی پست یا صفحه مورد نظر خود را به عنوان آرگومان، به این تابع ارسال کنید:
<a href="<?php echo get_permalink($ID); ?>">This is a link</a>
این یک راه ساده است برای زمانی است که شما می خواهید یک منو از صفحات یا پست های خود بسازید که در طول زمان ممکن است slug این پست ها یا صفحات، به کرات عوض شود. بنابراین بدون نگرانی از اینکه دچار breaking link گردید، می توانید از ID آن ها، برای این کار استفاده نمایید. البته در نظر داشته باشید که این کار ممکن است باعث افزایش تعداد کوئری های زده شده به دیتابیس شما گردد.
راهنما برای مطالعه بیشتر:
شما می توانید از لینک های زیر برای مطالعه بیشتر استفاده نمایید:
راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:
شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید:
سلام ما یک گروه تلگرامی برای وردپرس راه انداختیم که کلی از
اساتید هم هستند
خوشحال میشیم شما هم تشریف بیارید.
wpirangroup
واقعا ازتون ممنونم که جواب دادید. یه سایت دارم به آدرس asmarytest.somee.com که با html & css & js نوشتم.حالا وردپرس رو نصب کردم به صورت لوکال و آدرس دهی صفحه اصلی index.php رو به وردپرسی تبدیل کردم.و header.php , تابع get header رو برای صفحه index.php نوشتم و خطا هم نمیده.حالا از هر صفحه ای چه از صفحات فارسی و چه از صفحات غیر از index.php به index.php برمیگردم این خطا رو میده . وقتی get-header رو برای صفحات دیگر استفاده میکنم کلا اون صفحه هم خطا میده ولی برای index.php کار میکنه.چون آموزشهایی که من دیدم فقط یک صفحه رو تبدیل به وردپرس کردند .مثلا من برای تماس با ما با من اگه get header رو میزارم چرا خطا میده.کلا هر صفحه ای که به صفحه index.php لینک هست وقتی روش کلیک میکنم خطا میده
( ! ) Fatal error: Call to undefined function get_header() in C:\wamp\www\Asmary\wp-content\themes\asm\index.php on line 1
پیشاپیش ممنونم
سلام و روز شما بخیر
متاسفانه پیام شما، به بخش اسپم رفته بود و الان دیدم پیام شما رو. عذرخواهی من رو از این بابت بپذیرید.
به نظر میرسه شما دارید به صفحات تون از خارج از سایت وردپرس، درخواست می فرستید و همین باعث این ارور میشه. لینک زیر رو چک کنید، به نظرم جواب شما می تونه در این صفحه باشه. حتما رعایت کنید که نکاتی که در پاسخ اول گفته شده، حتما رعایت کرده باشد:
رفع مشکل Fatal error برای سایر صفحات در وردپرس
امیدوارم این بتونه مشکل شما رو حل کنه.
روز خیلی خوبی داشته باشید
سلام.من یه سایت با اچتی ام ال رو خواستم تبدیل کنم به وردپرس و طبق آموزش ها تبدیل کردم ولی وقتی از صفحه ای به صفحه ایندکس اصلی میام خطای get_header میده. سوال من اینه که آیا بقیه صفحات و هم مثل index.php باید تبدیل کنم یا نه.منظورم آدرس دهی ها و …سایت من هم دوزبانه هست.
ممنون میشم راهنمایی کنید.
سلام به شما دوست عزیز
قبل از هرچیز در طراحی و ساخت قالب برای وردپرس، حتما باید به ساختار سلسه مراتبی قالب وردپرس و همین طور نحوه کار آن آشنا باشید. اول از همه مقالات زیر رو حتما مطالعه کنید:
ساختار سلسه مراتبی قالب وردپرس
نحوه کار کردن Template hierarchy در وردپرس
مسلما صفحه index.php آخرین صفحه ای است که در ساختار سلسه مراتبی وردپرس لود میشه، یعنی اگه هیچ فایلی نباشه، این فایل در آخر لود خواهد شد. این یعنی هر کدام از بخش های سایت شما، می تونه صفحات جداگانه و کدهای جداگانه داشته باشه، مثلا صفحه خانه شما، با صفحه single پست شما، با صفحه مربوط به نمایش دسته بندی ها یا با صفحه نمایش تگ ها، می تونه کاملا متفاوت باشه. بالبطع هر کدوم از این صفحات، هدر دارند و می تونید حتی برای هرکدام هدر جداگانه داشته باشید. هر جا که بخواهید از هدر استفاده کنید، می باید از تابع get_header استفاده کنید.
متاسفانه از روی توضیحی که دادید، نتوستم بفهمم که مشکل شما چه چیز هست و حتما باید متن اروری که دریافت می کنید رو، میذاشتید تا شاید بهتر متوجه موضوع میشدم. به هرحال باز فکر می کنم که وقتی به صفحه جدید می روید، فایل هدر برای صفحه مورد نظر در دسترس نیست یا در مسیر درستی قرار ندارد. یا اینکه تابع get_header در تمامی بخش های template hierarchy تعریف نشده.
ببخشید که بیشتر نتونستم کمک کنم، سوالتون رو خیلی کلی مطرح کردید و متاسفانه بیشتر از این چیزی به ذهنم نرسید.