آموزش PHP برای وردپرس – رایگان و گام به گام
وردپرس یک سیستم مدیریت محتوای محبوب در اینترنت محسوب میشود. شما میتوانید بدون هیچ نوع دانش فنی برای سالها از آن استفاده کنید، اما اگر میخواهید از بقیه کاربران وردپرس متمایز شوید و یا تغییر خاصی در نظر دارید که فکر میکنید هیچ افزونهای نمیتواند در اختیار شما قرار دهد، در این صورت یا باید از کمک یک برنامهنویس PHP استفاده کنید و یا این که خودتان آستینها را بالا زده و وارد مسیر یادگیری PHP برای وردپرس شوید.
در این مقاله ابتدا مقدمه بسیار کوتاهی در مورد زبان PHP به عنوان زبان برنامهنویسی سیستم وردپرس خواهیم داشت. با توجه به این که این مقاله برای افرادی نوشته شده که با وردپرس آشنا هستند، بنابراین فرض ما این است که شما قبلاً دست کم در سطح متوسط با این سیستم آشنایی دارید و مدتی با آن کار کردهاید و همچنین با HTML نیز تا حدودی آشنا هستید. برای مطالعهای مقاله شما باید با روش ادیت کردن فایلهای وردپرس و بررسی فایلهای پوسته وردپرس آشنا باشید، هر چند در مورد محتوای این فایلها ایدهای نداشته باشید.
زبان برنامهنویسی وردپرس
وردپرس از چند زبان برنامهنویسی مختلف استفاده میکند، اما اگر بخواهیم یک زبان را به عنوان زبان اصلی برنامهنویسی وردپرس مشخص بکنیم، آن زبان PHP است. PHP یک زبان سمت سرور است و حدود 82 درصد از وبسایتهای دنیا به این زبان نوشته شدهاند.
وردپرس از زبانهای HTML ،CSS و جاوا اسکریپت نیز استفاده میکند. HTML برای ایجاد ساختار وبسایت استفاده میشود و تقریباً در همه وبسایتهای دنیا وجود دارد. CSS به استایلبندی این ساختار کمک میکند. CSS مواردی مانند رنگ پسزمینه وبسایت، تغییر رنگ فونت و موقعیت قرارگیری سایدبار را تعیین میکند. جاوا اسکریپت قابلیتهای پیشرفتهای مانند اسلایدرها و دیگر ویژگیهای تعاملی وبسایت را ارائه میکند.
در نهایت وردپرس از MySQL برای کوئری زدن به دیتابیس بهره میگیرد. برای نمونه از MySQL برای بازیابی نوشتههای اخیر و یا همه نوشتههای یک دسته از پایگاه داده استفاده میکنیم. شاید از دیدن این همه زبانهای مختلف و اطلاعات گوناگون در مورد وردپرس شوکه شده باشید، اما خبر خوب این است که در آغاز لازم نیست همه چیز را با هم بلد باشید. در واقع میتوانید با داشتن اطلاعات اندکی کارتان را راه بیندازید.
در واقع پیچیدگی برنامهنویسی، ناشی از پیچیدگی زبانهای برنامهنویسی نیست. وقتی فرایند یادگیری برنامهنویسی را به قطعات کوچکتر تقسیم کنید، یادگیری هر کدام از این بخشهای کوچک، کار آسانی محسوب میشود. دو دلیل دیگر برای دشواری یادگیری برنامهنویسی وجود دارد، یکی این است که در فرایند یادگیری برنامهنویسی باید چیزهای ساده بسیار زیادی را بیاموزید و دیگر این که باید بتوانید به صورت سیستمی فکر کنید که به کمی تمرین نیاز دارد.
نکته مهمی که باید توجه داشته باشید این است که در زمان یادگیری PHP برای وردپرس، لحظات سردرگمی و بلاتکلیفی زیادی خواهید داشت. ممکن است در ابتدا از این که چرا درک درستی از مسائل ندارید، ناامید شوید و یا از مشاهده کار نکردن کدی که فکر میکردید کار خواهد کرد، وحشت کنید. ممکن است ساعتها وقتتان را صرف کنید و در نهایت متوجه شوید که تنها یک سمیکالون (;) را فراموش کرده بودهاید. این موضوع کاملاً طبیعی است. همه برنامهنویسان موفق همین مسیر را طی کردهاند و شما نیز استثنا نیستید. با این حال اگر پشتکار داشته باشید، میتوانید به سرعت یک پوسته را کدنویسی کنید.
وردپرس چه چیزی نیست
شما باید متوجه باشید که در عمل چیزی به نام «کدنویسی وردپرس» یا «کد وردپرس» نداریم. وردپرس از مجموعه کدهایی تشکیل یافته که به زبان PHP نوشته شدهاند. دیگر سیستمهای مدیریت محتوا از قبیل جوملا و دروپال نیز به زبان PHP نوشته شدهاند.
در واقع وقتی از چیزی به نام کد وردپرس صحبت میکنیم، مانند این است که از خودروی بنز حرف بزنیم. بنز، نیسان و پورشه همگی خودرو هستند و همگی از پیچ و مهره تشکیل یافتهاند. تنها تفاوت بین آنها در شیوه گرد هم آوردن این قطعات، فلسفه طراحی و شیوه مونتاژ خودرو است.
وردپرس، جوملا و دروپال نیز همگی سیستمهای مدیریت محتوا هستند که با مؤلفههای یکسانی ساخته شدهاند. تنها تفاوت بین اینها در فلسفه کدنویسی و روش پیادهسازی است.
وردپرس بر مبنای PHP ساخته شده است
پیش از آن که شروع به یادگیری PHP برای وردپرس بکنیم، باید اندکی با پیشزمینه بحث آشنا شویم. وظیفه نمایش سایت بر عهده سرورهایی به نام وبسرور است که خب همان رایانههای معمولی با پیکربندی سختافزاری و نرمافزاری خاص هستند. در مورد اغلب سایتهای وردپرسی، وبسرورها از یک مجموعه نرمافزار به شرح زیر استفاده میکنند:
- لینوکس: یک سیستم عامل مانند ویندوز یا مکاواس است.
- آپاچی: نرمافزار وبسرور است که با مرورگرها ارتباط میگیرد.
- MySQL: به مدیریت پایگاه داده میپردازد.
- و PHP: پایگاه داده، سیستم عامل و فایلهایی که برای ساخت صفحههای وب لازم هستند را با یکدیگر هماهنگ میکند.
طرز کار PHP چگونه است؟
همچنان که پیشتر اشاره کردیم، PHP یک زبان اسکریپتنویسی سمت سرور است. به طور عکس HTML یک زبان سمت کلاینت است. ابتدا به بررسی HTML میپردازیم تا با اختلاف این دو بهتر آشنا شویم.
مرورگر شما کدهای HTML را به این صورت تفسیر میکند که وقتی یک صفحه HTML را در مرورگر باز میکنید، کد HTML به مرورگرتان ارسال میشود. مرورگر این اطلاعات را پردازش کرده و از دل آن چیزی به نام صفحه وب بیرون میکشد که با آن آشنا هستیم.
زمانی که مرورگر از صفحهای حاوی کد PHP بازدید میکند، یک گام میانی نیز وجود دارد. ابتدا کد PHP از سوی سرور پردازش میشود، نتیجه این پردازش یک صفحه HTML است که در ادامه به مرورگر ارسال میشود تا کاربر بتواند آن را ببیند.
این پردازش اضافی از سوی سرور ممکن است چیزی اضافی به نظر بیاید، اما اصلاً چنین نیست. در ادامه یک مثال عملی از کد واقعی PHP را میبینید:
1<?php if( date( 'G' ) > 18 ) : ?>
2
3 <h2>Good Night!</h2>
4
5<?php else : ?>
6
7 <h2>Good Day </h2>
8
9<?php endif ?>
اگر هیچ دانشی از زبان PHP نداشته باشید، همچنان میتوانید با نگاه کردن به کد فوق برخی اطلاعات را به دست آورید. صرفاً با خواندن این کد متوجه میشویم که اگر برخی شرایط وجود داشته باشند، عبارت «شب بخیر» (Good night) و در غیر این صورت عبارت «روز بخیر» (good day) نمایش مییابد.
زمانی که به سورس صفحه وب حاصل نگاه میکنیم، نمیتوانیم هیچ ردی از کد را ببینیم. تنها یکی از عبارتهای «شب بخیر» یا «روز بخیر» برای شما نمایش خواهد یافت. دلیل این امر آن است که سرور این کد را پردازش کرده و تنها نتیجه پردازش را به مرورگر کاربر ارسال میکند.
در مثال فوق از یک تابع برای تعیین این که چه زمانی از شبانهروز است، استفاده کردهایم. قطعه کد date('G') یک عدد بین 0 و 23 بازگشت میدهد که 0 نشاندهنده نیمهشب و 23 نشاندهنده 11 شب است. اگر مقدار این تابع بیش از 18 باشد (یعنی ساعت 6 بعد از ظهر به بعد) ما عبارت «شب بخیر» را نمایش میدهیم، در غیر این صورت عبارت روز بخیر نمایش مییابد.
اکنون ما دو نکته را در مورد PHP میدانیم. PHP به ما امکان میدهد که از «گزارههای if» برای نمایش محتوا بر مبنای یک معیار خاص استفاده کنیم. همچنین میدانیم که تابعهایی دارد که به ما کمک میکند این کار را انجام دهیم. تابع ()date تاریخ جاری را با قالب مفروض بازگشت میدهد. تابع ()strtolower هر متن را به حالت حروف کوچک تبدیل میکند. مجموع این تابعها به ما کمک میکند که کارهای زیادی را انجام دهیم.
PHP برای وردپرس
با توجه به توضیحاتی که در بخش قبل دیدیم، اکنون میتوانیم کد PHP را هر جا که در وردپرس استفاده شده باشد، بشناسیم. برای شروع فایل content.php را از پوسته پیشفرض وردپرس به نام Twenty Fourteen باز کرده و آن را بررسی میکنیم. این فایل مسئول نمایش محتوای نوشتههای بلاگ در پوسته است.
در ادامه خط نخست این فایل را (با حذف کامنت) میبینید:
1<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
زمانی که از این صفحه بازدید کنید، خروجی زیر را تولید میکند:
1<article id="post-344" class="post-344 post type-post status-publish format-standard has-post-thumbnail sticky hentry category-photos tag-example tag-tag">
با مقایسه دو قطعه کد فوق میتوانید متوجه شوید که تابع ()the_ID با شناسه نوشته مورد نظر عوض شده است. تابع ()post_class کلاسهای زیادی را به عنصر HTML اضافه میکند. به این ترتیب میتوانیم نوشتههای خود را در ادامه استایلبندی کنیم. در این مرحله لزومی ندارد با دلیل اضافه کردن این کلاسهای خاص آشنا باشید، چون فعلاً فقط روی یادگیری تابعها تمرکز داریم.
در ادامه به خط 24 تا 28 کد نگاه میکنیم که یک گزاره if به صورت عملی استفاده شده است:
1if ( is_single() ) :
2 the_title( '<h1 class="entry-title">', '</h1>' );
3else :
4 the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' );
5endif;
این گزاره if درون خود یک تابع به نام ()is_single دارد. این تابعی است که در صورت مشاهده یک نوشته منفرد مقدار «صحیح» (True) خواهد داشت، در غیر این صورت «نادرست» (False) خواهد بود. اگر این تابع مقدار درست بازگشت دهد، یعنی مشغول بازدید از یک نوشته منفرد باشیم، از تابع ()the_title برای ارائه عنوان نوشته در خروجی استفاده میکنیم.
اگر این تابع مقدار نادرست داشته باشد نیز همچنان از تابع ()the_title استفاده میکنیم اما بررسی میکنیم تا مطمئن شویم که یک لینک به برگه نوشته منفرد ارائه میشود.
شاید متوجه شده باشید که برخی تابعها خالی هستند، اما برخی دیگر کدهای متفاوتی درون خود دارند. برای نمونه تابع ()is_single یک تابع خالی است، اما تابع ()the_title چیزهایی درون پرانتز خود دارد.
آیتمهای درون این پرانتز به نام «آرگومان» (argument) نامیده میشوند. هر تابع آرگومانهای متفاوتی دارد که با کاما از هم جدا میشوند. برای آشنایی با آرگومانهای یک تابع میتوانید از مستندات پروژه بهره بگیرید. مقاله وبسایت فنی وردپرس به نام Codex نشان میدهد (+) که تابع ()the_title دارای سه آرگومان است:
- آرگومان نخست امکان افزودن کد HTML را پیش از عنوان فراهم میسازد.
- آرگومان دوم امکان افزودن کد HTML را پس از عنوان فراهم ساخته و
- آرگومان سوم در خروجی نمایش یابد و یا این که صرفاً برای استفاده بعدی ذخیره شود.
بر این اساس اکنون درکی از اتفاقاتی که در خط 25 فایل content.php میافتد داریم:
1the_title('<h1 class="entry-title">', '</h1>');
این تابع عنوان نوشته را نمایش میدهد، اما یک تگ آغازین h1 نیز آماده شده و به آن الحاق گشته است. نتیجه کد در مرورگر به صورت زیر است:
1<h1 class="entry-title">THe title of my article</h1>
روش پیشرفت در برنامهنویسی وردپرس
احتمالاً شما علاقه ندارید که هفتهها از وقت خود را به یادگیری PHP بپردازید و با زیر و رو کردن مستندات این زبان، همه مفاهیم مرتبط با PHP را بیاموزید. البته انجام این کار خوب است، اما بهتر است که در مسیر یادگیری تا جایی که میتوانید به آزمایش آموختههای خود بپردازید.
برای نمونه تلاش کنید فهرست تگهای یک نوشته را از انتهای مطلب به ابتدای آن بیاورید. تابع ()the_tags در انتهای فایل content.php وظیفه نمایش تگهای نوشته را بر عهده دارد.
ابتدا این تابع را پاک کرده و صفحه را رفرش کنید تا ببینید که فهرست تگها از نوشته حذف شده است. این کار نشان میدهد که این تابع در عمل مسئول نمایش تگها است اکنون آن را کپی کرده و در بخشهای مختلف فایل قرار دهید تا نتیجه نهایی را بررسی کنید.
به این ترتیب میبینید که هر چه این تابع را در بخشهای بالاتر فایل قرار دهید، محل نمایش تگها در نوشته نیز بالاتر میآید. با کمی آزمون و خطا میتوانید چیزهایی مانند ()the_excerpt و ()the_content که مسئول نمایش محتوا هستند را نیز شناسایی کرده و آنها را بالاتر از محتوای اصلی نوشته قرار دهید.
یادگیری وردپرس به این روش جالب و انگیزهبخشتر از مطالعه مستندات است، که البته امری ضروری است. اگر چیزی را درک نکردید، اصلاً نگران نشوید، در ادامه به سرعت به نقطهای خواهید رسید که آن را بفهمید.
یادگیری رویههای نامناسب
یک عیب یادگیری وردپرس به این روش آن است که ممکن است از رویههای نامناسب کدنویسی استفاده کنید. برای نمونه با این که ما توصیه کردیم، تابع ()the_tags را به جایی در ابتدای فایل کپی کنید تا تگها به ابتدای نوشته بروند، اما HTML مربوط به فوتر که از تگ فوتر استفاده میکند نیز باید تغییراتی داده شود تا به کد خوبی تبدیل شود.
این هم نکتهای است که فعلاً میتوانیم با دیده اغماض به آن بنگریم. شما مشغول ساخت یک محصول حرفهای برای یک شرکت بزرگ نیستید و صرفاً تلاش میکنید برخی موارد مقدماتی وردپرس را درک کرده و با طرز کار چیزهای مختلف آشنا شوید. این کار آسانی نیست و اشتباه هم جزئی لاینفک از این فرایند است.
زمانی که دانش خوبی در زمینه کدنویسی وردپرس به دست آوردید، میتوانید شروع به تغییر رویههای نامناسب کدنویسی بکنید و الگوهای کدنویسی را مطالعه کرده و دلیل کدنویسی برخی بخشها به روشهای خاص را متوجه شوید.
مروری بر کدهای مهم وردپرس
وردپرس تعدادی زیرسیستم مختلف دارد. برای نمونه زیرسیستم «حلقه» (loop) شیوه نمایش نوشتهها را کنترل میکند، «قلابها» (hooks) امکان دستکاری کارکرد پیشفرض را فراهم میسازند. API-های مختلف و همچنین پوستهها و افزونهها نیز زیرسیستم محسوب میشوند. در ادامه با برخی از موارد عمده که احتمالاً با آنها بیشتر مواجه خواهید شد آشنا میشویم.
فعالسازی قابلیت دیباگ
وردپرس به طور پیشفرض همه خطاهای کد را پنهان میسازد. این موضوع در محیط پروداکشن مطلوب است، اما در زمان توسعه میتواند منجر به مشکلاتی شود. اگر یک خطای غیر حیاتی در کد خود داشته باشید، هیچ پیام خطایی دریافت نمیکنید و کد نیز کار نمیکند و یا در صورت کارکرد صحیح نیز خروجی مطلوب را ارائه نمیدهد.
مشکل دیگر وردپرس، صفحه سفید مرگ است. در این حالت هیچ پیام خطایی مشاهده نمیشود و فقط یک صفحه سفید بدون هیچ نوع دسترسی به بکاند دیده میشود. برای این که مطمئن شوید این اتفاق نمیافتد، باید قابلیت دیباگ را فعال کنید تا به پیامهای خطا دسترسی داشته باشید.
این کار از طریق ادیت کردن فایل wp-config.php در دایرکتوری روت محصل نصب وردپرس ممکن است. به این منظور خطی را پیدا کنید که حاوی کد زیر باشد و مقدار False را به True تغییر دهید:
1define('WP_DEBUG', false);
پوستههای فرزند
«پوستههای فرزند» (Child Themes) پوستههای مجزایی هستند که بر اساس پوسته اصلی ساخته میشوند. آنها همه چیز را از پوسته والد به ارث میبرند، مگر این که مورد خاصی نیاز به دستکاری نیاز داشته باشد. این تنها روش مطمئن برای دستکاری یک پوسته محسوب میشود. چنان که پیشتر نیاز اشاره شد، آسانترین روش برای یادگیری، اقدام به ویرایش و دستکاری یک پوسته موجود است. این کار باید از طریق یک پوسته فرزند انجام یابد.
اگر یک پوسته فرزند را بر اساس پوسته Twenty Fourteen ساخته باشید، همچنان میتوانید آن را مطابق میل خود ویرایش کنید و در عین حال بدون از دست رفتن این تغییرها، پوسته را نیز به طور مرتب بهروزرسانی کنید. این نکتهای است که باید در زمان کار با مشتریهای خود نیز در نظر داشته باشید. همیشه و همیشه از پوستههای فرزند استفاده کنید.
ایجاد یک پوسته فرزند کار بسیار آسانی است. یک پوشه جدید بسازید و نام آن را دایرکتوری themes و یا هر نامی که دوست دارید بگذارید. در این مثال نام آن را child-theme میگذاریم. درون این پوشه یک فایل به نام style.css و همچنین فایلی دیگر به نام functions.php میسازیم. فایل اول که شامل استایلشیت است را باز کرده و از استایلهای زیر برای سفارشیسازی پوسته فرزند استفاده میکنیم:
1/*
2 Theme Name: Twenty Fourteen Child
3 Theme URI: http://mytheme.com
4 Description: My Child Theme
5 Author: Daniel Pataki
6 Author URI: http://danielpataki.com
7 Template: twentyfourteen
8 Version: 1.0.0
9 Tags: light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready
10 Text Domain: my-child-theme
11*/
12
13
14/* =Theme customization starts here
15-------------------------------------------------------------- */
شما میتوانید از هر چیزی مانند کد فوق استفاده کنید، تنها محدودیت در خطی است که با کلمه Template آغاز میشود. این خط باید شامل نام دایرکتوری پوسته والد باشد.
زمانی که از پوسته فرزند استفاده میکنیم، قاعده کار آسان است: هر زمان که فایلی بارگذاری میشود، وردپرس ابتدا در دایرکتوری فرزند به دنبال آن میگردد. اگر موجود نباشد، همان فایل را از دایرکتوری والد بارگذاری میکند. تنها استثنا در مورد فایل functions.php است. فایل های function از هر دو پوسته والد و فرزند بارگذاری میشوند، به این ترتیب که ابتدا فایل پوسته فرزند و سپس فایل پوسته والد بارگذاری میشود.
در این مرحله میتوانید به پوسته فرزند سوئیچ کنید، اما زمانی که از سایت خود بازدید کنید، هیچ گونه استایلی نخواهید دید. بر اساس قاعده فوق، درک دلیل این امر آسان است. استایلشیت از پوسته فرزند بارگذاری میشود، چون style.css در پوسته فرزند موجود است، اما هیچ اطلاعات استایلی در آن نوشته نشده است.
گام بعدی، بارگذاری استایلها از پوسته والد است. این کار به وسیله درخواست واکشی استایلشیت از پوسته والد انجام مییابد. در این مورد نباید نگران باشید. کافی است کد را از پوسته والد کپی کرده و در فایل functions.php پوسسته فرزند بچسبانید. فقط مطلع باشید که با این کار استایلها از پوسته والد بارگذاری خواهند شد.
1add_action( 'wp_enqueue_scripts', 'my_parent_styles' );
2function my_parent_styles() {
3 wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
4}
در این مرحله پوسته فرزند شما دقیقاً همانند پوسته والد است. اکنون میتوانید شروع به دستکاری چیزهای مختلف بکنید. شما میتوانید از استایلشیت برای لغو استایلها یا افزودن قواعد جدید استفاده کنید. برای نمونه اگر میخواهید فایل index را دستکاری کنید، تنها کاری که باید بکنید این است که یک فایل جدید index در دایرکتوری پوسته فرزند بسازید.
اگر یک فایل ایندکس خالی ایجاد کنید، در این صورت هر برگهای که از آن استفاده کند نیز خالی خواهد بود. با این حال، همه برگههای دیگر به خوبی به کار خود ادامه میدهند چون آنها از فایلهای پوسته والد استفاده میکنند. شما یا میتوانید شروع به نوشتن کد خود در فایل Index بکنید و یا کد را از فایل پوسته والد کپی کرده و در این فایل چسبانده و تغییرات لازم را در آن بدهید.
نتیجه این کار چنین میشود که میتوانید یک پوسته موجود را بسته به میل خود ویرایش کنید، اما همزمان میتوانید پوسته والد را نیز ویرایش کرده و یا هر زمان که دوست داشتید دوباره به استفاده از پوسته والد روی بیاورید.
کوئری و حلقه
Query سیستمی در وردپرس است که میداند کدام نوشتهها را باید در یک برگه نشاندهنده و Loop نیز بخشی از آن چیزی است که عناصر مختلف هر نوشته را تنظیم کرده و نمایش میدهد. برای نمونه در صفحه اصلی وبسایت، کوئری به دنبال 10 نوشته اخیر میگردد در بایگانی دسته کوئری به دنبال 10 نوشته اخیر همان دسته میگردد. حتی میتوان از کوئری روی برگههای منفرد استفاده کرد تا به دنبال برگههای منفرد در پایگاه داده بگردد.
کوئری چیزی است که میتوان دستکاری و برای نیازهای خاص استفاده کرد، اما اکنون روی کاربرد پیشفرض آن متمرکز میشویم که در پشت پرده قرار دارد. ما از نتیجه آن از طریق Loop بهره میگیریم.
حلقه یا Loop همه نوشتههایی که کوئری بازگشت داده را میگیرد و یک به یک همه آنها را مورد بررسی قرار میدهد. در برخی برگهها مانند برگههای منفرد تنها یک نوشته وجود دارد. اما آنها نیز به عنوان کلکسیون نوشتهها در نظر گرفته میشوند. در این مورد این کلکسیون شامل یک نوشته منفرد است.
در ادامه کد ابتدایی یک loop را به طور خط به خط بررسی میکنیم:
1<?php if( have_posts() ) ?>
2
3 <?php while( have_posts() ) : the_post() ?>
4 <div <?php post_class() ?>>
5 <h2><?php the_title() ?></h2>
6 <div class='content'>
7 <?php the_content() ?>
8 </div>
9 </div>
10 <?php endwhile; ?>
11
12<?php else: ?>
13 Oh no, there are no posts here
14<?php endif ?>
در خط اول از یک گزاره if به همراه تابع ()have_posts برای تشخیص این که آیا کوئری نوشتهای بازگشت داده یا نه استفاده میکنیم. اگر هیچ نوشتهای موجود نباشد، کد پس از بخش else را اجرا میکنیم که به کاربر اطلاع میدهد هیچ نوشتهای وجود ندارد.
اگر نوشتههایی وجود داشته باشند از Loop استفاده میکنیم. چند نوع حلقه (Loop) در PHP وجود دارند که بررسی همه آنها خارج از حیطه این مقاله است. در کد فوق از یک حلقه while استفاده کردهایم که شامل تابع ()have_posts است. این تابع در صورت عدم وجود نوشتههای دیگر در حلقه و یا در صورتی که همه نوشتهها قبلاً نمایش یافته باشند، مقدار False بازگشت میدهد.
همه چیز درون حلقه While زمانی اجرا میشود که این تابع مقدار True بازگشت دهد. این دقیقاً آن چیزی است که نیاز داریم. به محض این که نوشته آخر را نمایش دهیم، مقدار ()have_posts برابر با False میشود تا حلقه پایان یابد.
درون حلقه یک مجموعه آیتمهای ساده مرتبط با نوشته با استفاده از تگهای قالب که قبلاً توضیح دادیم ایجاد کردهایم. این حلقه را میتوان در هر قالب پوستهای که نوشتهها را فهرست میکند، مورد استفاده قرار داد. صفحههای جستجو، برگههای نوشته منفرد، صفحههای بایگانی، فایل اندیس و به طور کلی هر زمان که قرار است نوشتهها را لیست کنید، میتوانید از loop استفاده کنید.
کوئریهای سفارشی
این که در همان ابتدای یادگیری وردپرس شروع به آموختن کوئریهای سفارشی بکنید، امر معمولی محسوب نمیشود، اما بنا بر تجربه، کوئریهایی سفارشی یکی از مهمترین قابلیتهای وردپرس هستند. در بخش قبلی با شیوه لیست کردن نوشتهها با استفاده از حلقه آشنا شدیم، اما در این حالت محدود به چیزی هستید که به طور پیشفرض بازگشت مییابد. اگر بخواهیم نوشتههای مرتبط را در همان دسته و تحت یک نوشته منفرد نمایش دهیم چطور؟ این کار با استفاده از کوئریهای سفارشی در وردپرس به آسانی انجام مییابد.
شما میتوانید با استفاده از کلاس WP_Query یک کوئری سفارشی ایجاد کنید. توضیح طرز کار کلاسها در این مرحله کمی دشوار است، اما همین قدر بدانید که استفاده از آنها کاملاً آسان است. در مثال زیر نوشتههای زمانبندیشده از یک دستهبندی خاص را نمایش میدهیم.. شما میتوانید از این کد برای نمایش یک بخش خاص با عنوان «به زودی در این دسته خواهید دید...» استفاده کنید.
1<?php
2 $args = array(
3 'post_type' => 'post',
4 'post_status' => 'future',
5 'category_name' => 'app_reviews',
6 'posts_per_page' => 3
7 );
8 $coming_soon = new WP_Query( $args );
9?>
چنان که در کد فوق میبینید، کارکرد آن کاملاً سرراست است. برای ویرایش این کد بسته به نیاز میتوانید محتوای آرایه args$ را دستکاری کنید. بسیاری پارامترها وجود دارند که میتوانید برای محدود کردن نوشتهها استفاده کنید، برای نمونه میتوانید آنها را بر اساس تاریخ انتشار، بر اساس نویسندگان، دستهبندیها، فیلدهای سفارشی و موارد دیگر انتخاب کنید.
اکنون که با کوئری سفارشی آشنا شدیم، میتوانیم یک حلقه Loop سفارشی برای نمایش محتوا بسازیم. تنها چیزی که نیاز داریم، افزودن یک پیشوند با نام متغیری که کوئری را ذخیره میکند و یک arrow به تابعهای ()have_posts و ()the_post است:
1<?php if( $coming_soon->have_posts() ) ?>
2
3 <ul>
4 <?php while( $coming_soon->have_posts() ) : $coming_soon->the_post() ?>
5 <li <?php post_class() ?>>
6 <a href='<?php the_permalink() ?>'><?php the_title() ?></a>
7 </li>
8 <?php endwhile; ?>
9 </ul>
10
11<?php endif ?>
جدا از این که با استفاده از قالب پیشگفته به کوئری سفارشی خود اشاره میکنیم، باید توجه کنید که بخش else حلقه را کنار گذاشته و از یک لیست HTML به جای div-ها استفاده کردهایم. از آنجا که این حلقه به منظور فهرست کردن نوشتهها زیر یک نوشته منفرد کامل طراحی شده است، بهتر است که در صورت عدم وجود نوشته، چیزی نمایش ندهد. به علاوه یک لیست ساده به همراه لینک کافی است و کاربران میتوانند روی هر کدام از آیتمها کلیک کرده و بیشتر در مورد آن نوشته مطالعه کنند.
قلابها
وردپرس از یک سیستم هوشمند برای فراهم ساختن قابلیت ویرایش تابعهای هسته خود استفاده کرده است. در این جا باید تأکید کنیم که هرگز و به هیچ دلیلی نباید فایلهای هسته وردپرس را ویرایش کنید. یعنی هیچ کدام از فایلهایی که در بسته نصبی وردپرس عرضه میشوند نباید دستکاری شوند.
با این که ممکن است گاهی اوقات به نظر برسد که این کار تنها راه چاره است، اما هرگز چنین نیست. هر کاری که لازم دارید را میتوانید با استفاده از قلابها یا روشهای دیگر انجام دهید. ویرایش فایلهای هسته وردپرس نه تنها خطرناک است؛ بلکه هر چیزی که دستکاری شده باشد، با آپدیت بعدی وردپرس از بین خواهد رفت.
«قلابها» (Hooks) امکان ویرایش طرز کار وردپرس را فراهم ساختهاند. این قلابها به دو دسته اکشنها و فیلترها تقسیم میشوند. اکشنها امکان اجر ای یک تابع شخصی را در مکانهای خاصی از کد وردپرس فراهم میسازند. برای نمونه، اجرا کنید. به این ترتیب برای نمونه میتوانید به نوشنده مطلب یک اعلان بفرستید.
فیلترها امکان ویرایش دادهها را پیش از ن که استفاده شوند در اختیار ما قرار میدهند. برای نمونه میتوانید از یک فیلتر برای دستکاری متنی که کاربر در زمان ذخیره کردن نوشته میبیند، استفاده کنید. برای مثال میتوانید در این مورد به جای عبارت Post draft updated از جمله Your draft has been saved. استفاده کنید.
یک نمونه عالی از قلاب اکشن wp_footer است. این اکشن درست پیش از تگ پایانی body پوسته میآید. با استفاده از این اکشن میتوانید کدهای خاص خود را به انتهای یک پوسته اضافه کنید و نیازی به دستکاری خود فایل فوتر پوسته نیز وجود ندارد. در فایل functions.php پوسته کد زیر را درج کنید تا یک کد ردگیری به سایت خود اضافه کنید.
1add_action( 'wp_footer', 'my_tracking_code' );
2
3function my_tracking_code() {
4 ?>
5 // Paste Google Analytics code here
6 <?php
7}
خط اول کد به وردپرس اعلام میکند که باید تابع ()my_tracking_code ما را به قلاب wp_footer اضافه کند. به این ترتیب زمانی که وردپرس یک صفحه را بارگذاری و قلاب wp_footer را مشاهده میکند، همه تابعهایی که با آن پیوند دارند را نیز جستجو و اجرا خواهد کرد. این تابع کد ردگیری گوگل آنالیتیکز را به فوتر سایت اضافه میکند.
به این ترتیب با مبانی طرز کار افزونهها نیز آشنا شدید. اگر بخواهید یک افزونه ایجاد کنید و کدی را در آن قرار دهید، دیگر هیچ نیازی به دستکاری پوسته نخواهید داشت. معنی این حرف آن است که اگر پوستهای که کد گوگل آنالیتیکز را به آن اضافه کردهاید، تغییر دهید، این سرویس همچنان بدون مشکل کار خواهد کرد.
در این بخش، برای نمایش طرز کار فیلترها، به ویرایش محتوای یک نوشته با استفاده از یک فیلتر میپردازیم. فیلتر ()the_content درست پیش از آن که محتوای نوشته نمایش یابد اجرا میشود. اگر از یک قلاب برای پیوند دادن یک تابع به آن استفاده کنیم، میتوانیم شیوه نمایش محتوا را نیز تغییر دهیم.
کد زیر متن Checked by را به طور خودکار به پس از هر نوشته منفرد اضافه میکند. در واقع این کار هر زمان که کل محتوای یک نوشته نمایش یابد انجام میشود.
1add_filter( 'the_content', 'my_content_filter' );
2
3function my_content_filter( $content ) {
4 $content .= ' (checked by Daniel Pataki)';
5}
توجه کنید که این تابع یک پارامتر نیز دارد. هر فیلتر و اکشن میتوانند یک یا چند پارامتر داشته باشند. برای بررسی قلابهایی که میتوانید در وردپرس استفاده کنید، باید به مستندات این سیستم برای اکشنها (+) و فیلترها (+) مراجعه کنید.
سخن پایانی
مهمترین نکته در زمان یادگیری PHP برای وردپرس این است که تلاش کنید عملاً به کدنویسی بپردازید. به این منظور میتوانید یک سایت آزمایشی با وردپرس بسازید، برخی تگهای PHP را دستکاری کنید، برخی موارد را تغییر دهید و چالشهایی برای خود تعریف کنید. زمانی که به حل این چالشها میپردازید، یادگیری بسیار کارآمدتر و مؤثرتر از زمانی خواهد بود که اطلاعاتی را صرفاً روخوانی میکنید.
استفاده از PHP برای وردپرس نیاز به تمرین و کار زیادی دارد، اما نتیجه آن بسیار ارزشمند است زیرا کمک میکند تا سطح مهارتهای خود را ارتقا بخشید و در زمینه تغییر بخشهای مختلف یک سایت وردپرس بسیار دستتان بازتر باشد.
سلام من بعداینکه وردپرس رو حذف و نصب کردم تابازمپ اجراش کنم متاسفانه فایل های اکسترکت شده وردپرس در زمپ فاقد پسوند php هستند و توی مراحل مختلف کار با وردپرس و طراحی سایت انواع خطا میده ک ی جورایی مزمونش اینه ک پی اچ پی کارنمیکنه من چیگارکنم ( کاملاهم تازه واردم)