شدیدا با این دیدگاه که وردپرس تنها برای ساخت وبلاگ مناسبه، مخالفم. وقتی از وردپرس یاد می شه در واقع ما یک سیستم مدیریت محتوا در اختیار داریم که هر آنچه بخواهیم می توانیم با آن ایجاد کنیم از یک وبلاگ ساده گرفته تا یک سایت بزرگ خبری با بخش های متفاوت یا یک مجله الکترونیکی. حتی اگر ما فرض را بر این بگیریم که هیچ پلاگینی در کار نیست، قابلیت های وردپرس بیش از آن چیزی است که در قالب پیش فرض آن گنجانده شده است. در این مبحث و بحث های آتی به شرح مختصری از این قابلیت ها خواهیم پرداخت.
چگونه لیستی از پست های اخیر را در سایدبار (نوار کناری وبلاگ) قرار دهیم؟ این ساده ترین سوالی است که یک تازه کار با آن مواجه می شود. وردپرس به طور مستقیم تابعی را برای این کار در نظر نگرفته است چون نیازی به آن نیست. با کمی خلاقیت می توان تعداد پست های اخیر را به هر نحو دلخواهی لیست کرد و نمایش داد. تکه کد زیر این کار را برایمان انجام می دهد:
-
<?php
-
$posts = get_posts('numberposts=10');
-
foreach($posts as $post) :
-
setup_postdata($post);
-
?>
-
<a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a>
-
<?php endforeach; ?>
در خط دوم دستور فوق، به کمک تابع get_posts تعداد پست های دلخواه را برابر 10 درنظر گرفتیم و از هیچ آرایش دیگری استفاده نکردیم، این ساده ترین فرم است. پارامترهای دیگر این تابع به قرار زیر است:
offset : تعیین تعداد پست ها از اولین پست، برای مثال چنانچه در صفحه اصلی وبلاگ تعداد مطالب را بربر 5 قرار داده ایم می توانیم با تعیین مقدار 5 برای offset پست های اخیر را به استثنای آن 5 پست اول نمایش دهیم. category : تعیین پست های یک دسته خاص، به طوری که تنها پست های موجود در آن دسته لیست شوند. عددی که برای این پارامتر ذکر می شود مشخصه یا همان id دسته خاص است. orderby : تعیین اینکه بر چه اساسی لیست شوند؟ برای مثال می توان آن را بر اساس زمان هر پست post_date یا عنوان هر پست post_title قرار داد. و در نهایت پارامتر order : تعیین صعودی یا نزولی بودن لیست بر اساس پارامتر orderby که می تواند ASC یا صعودی و DESC یا نزولی در نظر گرفته شود.
برای آنکه بتوانیم آرایش دیگری را به لیست نسبت دهیم باید هر کدام از پارامترهای فوق را با کاراکتر & و تعیین مقدار آن به یکدیگر ربط دهیم. برای مثال مدل زیر 20 پست اخیر را به استثنای 3 پست اول بر اساس زمان هر پست به طور نزولی مرتب می کند:
-
$posts = get_posts('numberposts=20&offset=3');
چون تعداد عناصر آرایه posts (خط دوم) برای ما مشخص نیست برای استخراج مقادیر مد نظر از دستور foreach استفاده کردیم (خطوط سه تا هفت) به این صورت که posts$ نام آرایه ای است که محتویات آن باید دستیابی شود و post$ متغیری است که عنصر فعلی آرایه در آن قرار می گیرد.
خط ششم صورت کلی خروجی را تشکیل می دهد. تمام مقادیری که برای یک پست صادق است می تواند در این میان بکار رود. که در این مثال چون ما قصد داشتیم تنها لیستی از پست های آخر را فهرست کنیم نیازی به سایر قسمت ها نداریم. بالفرض چنانچه بخواهیم 10 پست دسته ای با آی دی 2 را نمایش دهیم از فرم زیر استفاده می کنیم:
-
<?php
-
$posts = get_posts('numberposts=10&category=2');
-
foreach($posts as $post) :
-
setup_postdata($post);
-
?>
-
<a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a>
-
<?php the_content(); ?>
-
<?php endforeach; ?>
سوال دیگری که برای بیشتر کاربران وردپرس پیش میاد اینه که چگونه روزنوشت برای وبلاگ درست کنیم. در اینجا قصد داریم به کمک ترفند بالا یک روزنوشت ایجاد کنیم. در ابتدای کار یک دسته بنام روزنوشت یا هر چیز دلخواه دیگری ایجاد می کنیم. روزنوشت ما به اینصورت خواهد بود که در بالای صفحه اصلی جدیدترین مطلب روزانه را نمایش داده و بعد از آن مطالب دیگر وبلاگ طبق روال نمایش داده می شود. برای این منظور ابتدا روزنوشت را به شرح زیر ایجاد می کنیم:
-
<?php
-
$al_post = get_posts( 'category=1&numberposts=1' );
-
if( $al_post ) :
-
foreach( $al_post as $post ) :
-
setup_postdata( $post );
-
?>
-
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
-
<div class="entry">
-
<?php the_content(); ?>
-
</div>
-
<div class="meta"> <?php the_time('F jS, Y'); ?></div>
-
<?php endforeach; ?>
-
<?php endif; ?>
در مثال فوق فرض شده است شماره مشخصه یا همان آی دی دسته روزنوشت برابر 1 است. تعداد پست های نمایش داده شده را هم برابر با 1 در نظر می گیریم. فکر نکنم با توجه به توضیحات فوق نیازی به شرح دوباره باشد. حال به سراغ حلقه اصلی صفحه می رویم تا بقیه پست ها را طبق روال نمایش دهیم. کدهای زیر این عملیات را برای ما انجام می دهند:
-
<?php
-
if (have_posts()) :
-
while (have_posts()) : the_post();
-
if ( !(in_category('1') && is_home())):
-
?>
-
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
-
<div class="entry">
-
<?php the_content(); ?>
-
</div>
-
<div class="meta"><?php the_category(); ?> <?php the_time('F jS, Y'); ?></div>
-
<?php endif;
-
endwhile;
-
else : ?>
-
<div class="error">
-
<h2>Not Found</h2>
-
<?php include (TEMPLATEPATH . "/searchform.php"); ?>
-
</div>
-
<?php endif; ?>
تعجب نکنید. این تکه کد همان تکه کدی است که قبلا در صفحه اصلی موجود بود اما با این تفاوت که حالا خط 4 را به آن اضافه کرده ایم. اما چه لزومی دارد که یک عبارت شرطی به این شکل بسازیم؟ فرض کنید یک مطلب برای دسته روزنوشت ارسال کرده اید. در اولین نگاه این مطلب یک روزنوشت به شمار می رود و توسط قسمت روزنوشت به خروجی داده می شود اما این مطلب در حلقه بعدی هم قرار خواهد گرفت چرا که جزئی از مطالب وبلاگ است به همین جهت توسط این دستور شرطی، مطالب دسته روزنوشت را از حلقه ی اصلی وبلاگ حذف کرده ایم.
اما باز هم یک مشکل وجود دارد. اگر کاربر بر روی آرشیو ماهانه یا دسته مطالب روزانه کلیک کند مطالب روزمره را نخواهد یافت چرا که مطالب از حلقه ی اصلی حذف شده بهمین جهت شرط is_home را بهمراه آن اعمال می کنیم تا در صفحه ی اصلی وبلاگ، محتویات دسته روزنوشت در حلقه قرار نگیرد و در خروجی دوم چاپ نشود. با این کار عدم نمایش مطالب روزنوشت تنها در صفحه ی اصلی وبلاگ لحاظ می شود و در صفحات دیگر از جمله آرشیو ماهانه یا موضوعی، روزنوشت ها قابل مشاهده خواهد بود.
دقت کنید این کدها باید در قالب اصلی وبلاگ (Main Template) یعنی index.php قرار گیرند لذا واجب است تا مابقی قسمت های این صفحه از جمله سربرگ، سایدبار و پاورقی به این صفحه ضمیمه شوند. در هر صورت اگر مشکلی داشتید در کامنت ها عنوان کنید. شاد و پیروز باشید.