شگردهای طراحی با وردپرس

October 13, 2005 at 01:05 am

شدیدا با این دیدگاه که وردپرس تنها برای ساخت وبلاگ مناسبه، مخالفم. وقتی از وردپرس یاد می شه در واقع ما یک سیستم مدیریت محتوا در اختیار داریم که هر آنچه بخواهیم می توانیم با آن ایجاد کنیم از یک وبلاگ ساده گرفته تا یک سایت بزرگ خبری با بخش های متفاوت یا یک مجله الکترونیکی. حتی اگر ما فرض را بر این بگیریم که هیچ پلاگینی در کار نیست، قابلیت های وردپرس بیش از آن چیزی است که در قالب پیش فرض آن گنجانده شده است. در این مبحث و بحث های آتی به شرح مختصری از این قابلیت ها خواهیم پرداخت.

چگونه لیستی از پست های اخیر را در سایدبار (نوار کناری وبلاگ) قرار دهیم؟ این ساده ترین سوالی است که یک تازه کار با آن مواجه می شود. وردپرس به طور مستقیم تابعی را برای این کار در نظر نگرفته است چون نیازی به آن نیست. با کمی خلاقیت می توان تعداد پست های اخیر را به هر نحو دلخواهی لیست کرد و نمایش داد. تکه کد زیر این کار را برایمان انجام می دهد:

<?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 قرار گیرند لذا واجب است تا مابقی قسمت های این صفحه از جمله سربرگ، سایدبار و پاورقی به این صفحه ضمیمه شوند. در هر صورت اگر مشکلی داشتید در کامنت ها عنوان کنید. شاد و پیروز باشید.

دسته: وردپرس | نویسنده: مرتضی الوانی
  1. 19 نظر برای این مطلب ارسال شده است. نظر خود را ارسال کنيد »

  1. 1

    محمد خان


    ایول! خوش به حال وردپرسی ها!

    October 13, 2005 at 10:36 am

  2. 2

    بارزام


    و خوش به حال اونایی که وردپرسشون رو با این ترفند خوشگل در وکردیونی.

    October 13, 2005 at 12:17 pm

  3. 3

    Payam


    خیلی جالب و مفید بود !
    دمت گرم ، همینطور پرچم وردپرس رو سرافراز نگه دار !
    واقعا لذت بردم ، از خوندن این مقاله ، امیدوارم که ادامه هم داشته باشه…

    October 13, 2005 at 8:43 pm

  4. 4

    میلاد قیصری


    حرکت جالبی بود ولی ما که WordPress نداریم!
    :D

    October 13, 2005 at 10:51 pm

  5. 5

    مانی منجمی


    خیلی جالبه که همه اتفاق ها با هم تو یه روز می افته ! من تو هفته اخیر کار با حلقه وردپرس رو تو عمل استفاده کردم ،

    مطلب خوبی بود فقط دو تا نکته :

    * یکی اینکه دستور rewind_posts() رو هم به مقاله ات اضافه کنی ، خیلی خوب می شه ، برای صفحات چند تکه لازمه.
    *
    * دوم اینکه اگه به جای get_posts() از wp_query استفاده بشه ، هم نیاز به دستورات دیگه نیست ، دوم اینکه می شه چند تا instance مختلف هم تو یه صفحه داشت.

    *

    October 15, 2005 at 2:50 pm

  6. 6

    فرید دلفی


    سلام
    مرسی از توضیحاتت.

    October 15, 2005 at 10:18 pm

  7. 7

    فرید


    سلام
    مطلب جالبی.

    October 15, 2005 at 10:29 pm

  8. 8

    SepehЯ


    چاکر هر چی وردپرسی یه!
    ورد پــــــــرس! خوشمان آمد!

    October 17, 2005 at 4:07 am

  9. 9

    کامیار


    آها!
    نکته اش اینجاست….
    ببین من هر دفعه که وردپرس نصب میکنم بیشتر شیفته اش میشم! در نتیجه هر چه بیشتر نصب کنم بیتره :D
    ولی خب جدای از شوخی! جدا حاضر نبودی از مووبل تایپ بگذری؟

    October 22, 2005 at 3:19 am

  10. 10

    دانیال


    سلام مرتضی جان

    سایت وردپرس پارسی رو با کمک و راهنمایی علی ستاری راه انداختیم، خوشحال میشم از حضور و راهنمایی های شما استفاده ببریم

    موفق باشین

    دانیال

    October 25, 2005 at 9:54 am

  11. 11

    وبلاگ مانی منجمی » استفاده کامل از قابلیت های وردپرس


    […] تو همون دوران که داشتم این کار رو انجام می دادم، آقای الوانی ، مطلب خوبی با عنوان "شگردهای طراحی با وردپرس" در مورد استفاده حرفه ای تر از وردپرس نوشتن ، که می تونه منبع خوبی برای شروع طراحی سیستم های مدیریت محتوا با وردپرس باشه.   […]

    October 28, 2005 at 1:46 pm

  12. 12

    محمد


    سلام
    مطلب جالبی.

    November 4, 2005 at 1:29 pm

  13. 13

    سالار کابلی


    سلام آقای الوانی
    در رابطه با مطلب خیلی عالیه
    ولی اگر منم توی لیست دیگران قرار بدی منو خوشحال میکنی (آدرس وبلاگم عوض شده)
    به هر حال میخواستم ازتون اجازه بگیرم تا آدرستونو توی وبلاگ بذارم

    November 9, 2005 at 11:25 pm

  14. 14

    snjonline blog


    سلام
    هر چند ديره ولي خسته نباشيد. :)

    April 1, 2007 at 7:39 am

  15. 15

    مريم


    سلام
    من تازه مي خوام ورد پرس ياد بگيرم. اگه تونستيد به بنده حقير كمك كنيد.هلپ برام بفرستيد. مرسي. باي

    August 5, 2007 at 9:53 pm

  16. 16

    رضا


    واقعا جاي تشكر داره
    همون چيزي رو كه مي‌خواستم پيدا كردم

    August 15, 2007 at 10:34 am

  17. 17

    یاهو ایرانی


    خوب بود ممنون

    August 28, 2007 at 5:29 am

  18. 18

    با اینترنت » Blog Archive » مقایسه وردپرس و بلاگفا


    […] که بخواهید به وردپرس اضافه کنید. به قول آقای الوانی در این پست “… وقتی از وردپرس یاد می شه در واقع ما یک سیستم […]

    March 5, 2008 at 4:55 pm

  19. 19

    صدرا


    سلام من میخوام این لیست رو تو یه وبلاگ دیگه نشون بدم چی کار کنم ؟

    October 29, 2008 at 3:23 am