صفحه بندی مطالب در وردپرس

صفحه بندی در وردپرس: یک سری مفاهیم اولیه
در این مقاله / آموزش به اصول اولیه ی صفحه بندی در وردپرس، تنظیمات صفحه بندی پیش فرض و چگونه می توان آن را افزایش داد.
طرح صفحه بندی پیش فرض
فراموش نکنید در هنگام صفحه بندی، وردپرس باید بداند که در لیست هر صفحه چند آیتم وجود خواهد داشت. این مقدار اولیه (value) در مدیریت -> تنظمیات -> خواندن صفحه ی تنظیمات، تنظیم شده است.

مقدار اولیه “Blog pages show at most” توسط وردپرس استفاده خواهد شد، مگر اینکه شما آن را لغو کنید، مانند هنگامی که از یک تحقیق سفارشی استفاده می کند.
کد صفحه بندی پیش فرض
یک نمونه ی متداول از نشان دادن یک لیست از چندین پست، زمانی است که شما همه ی پیام ها را در یک رده بندی مشاهده می کنید. نمایش دادن پست های طبقه بندی شده توسط فایل الگویcategory.php صورت می گیرد. برای تم 2011، صفحه رده بندی، نمایش صفحه بندی را به یک تابع به نام twentyeleven_content_nav می دهد، که در فایل functions.php یافت می شود.

function twentyeleven_content_nav( $nav_id ) {

  global $wp_query;

  if ( $wp_query->max_num_pages > 1 ) : ?>

  <nav id="<?php echo $nav_id; ?>">
    <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentyeleven' ); ?></h3>
    <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">←</span> Older posts', 'twentyeleven' ) ); ?></div>
    <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">→</span>', 'twentyeleven' ) ); ?></div>
  </nav><!-- #nav-above -->

  <?php endif;
}

کد بالا همچنین می توانست فقط به طور مستقیم درcategory.php گنجانده شود، اما طراحان دوهزار و یازده تصمیم گرفتند آن را به یک تابع تبدیل کنند به طوری که می توان آن را از بسیاری از فایل های الگو فرا خواند. بیشتر این کد برای مقاصد طرح بندی و بین المللی کردن است، اما آنچه انجام می دهد در اینجا آمده است:
• با استفاده از مقدار اولیه متغیرهای جستجو سراسری $ wp_query-> max_num_pages ، بررسی می کنیم که آیا بیش از یک صفحه داریم یا نه، با این روش از نشان دادن کل انسداد صفحه بندی در صورت وجود تنها یک صفحه از پست ها، اجتناب می کنیم
• تابع وردپرسnext_posts_link یک لینک را به صفحه بعدی پست ها نمایش می دهد و یک آرگومان اختیاری برای متن لینک سفارشی می گیرد
• به طور مشابه، تابع وردپرسprevious_posts_link یک لینک را به صفحه قبلی ارسال ها، نمایش می دهد
و تصویر زیر همان چیزی است که در صورت انجام تنظیم دو پست در هر صفحه، به نظر خواهد رسید.

default_paging

این کار بسیار پیش پا افتاده، اما بسیار کاربردی است. مشکل این گونه نمایش صفحه، این است که هیچ راهی برای گفتن این که در کدام صفحه هستید، و یا در کل چند صفحه وجود دارد، نیست.
یک چیز که باید درباره ی لیست کردن پیش فرض وردپرس به یاد داشته باشید این است که آنها در جهت معکوس اجرا می شوند:
از آنجا که نمایش پست ها معمولا به ترتیب زمانی معکوس طبقه بندی شده اند،next_posts_link () معمولا به نوشته های قدیمی تر اشاره می کند (به سمت پایان مجموعه) وprev_posts_link () معمولا به نوشته های جدیدتر اشاره می کند (به سمت ابتدای مجموعه).
اگر شما در حال ایجاد یک جستجوی سفارشی باشید، رفتار بالا را می توان تغییر داد. توجه داشته باشید در مثال بالا، دو بلوک صفحه بندی مورد استفاده قرار گرفت: یکی قبل از شروع حلقه پس و دیگری بعد از شروع حلقه. خوب است که همیشه در هر دو سمت بالا و پایین، صفحه بندی داسته باشیم، بنابراین کاربر نیازی به حرکت بیش از حد نخواهد داشت.
مثال:
برای نمایش “برو به صفحه ی بعد…” (“Go to next page…”) در حالی که متن را لینک می کنید:

next_posts_link('Go to next page...');  

برای نمایش یک تصویر به جای متن:

$previous_posts_image = '<img src="' . get_bloginfo('stylesheet_directory') . '/images/previous_posts.png" />';
previous_posts_link($previous_posts_image);

پیشنهادهای متناوب
یک جایگزین برای استفاده از تابع های جداگانه یnext_posts_link وprevious_posts_link وجود دارد، و آن تابع posts_nav_link است. در واقع، این تابع هر دو لینک قبلی و بعدی را در یک حرکت خارج می کند، با لینک متن اختیاری و لینک تفکیک کننده آرگومان ها.
خروجی پیش فرض:

posts_nav_link();  

default_paging_alt

و با متن لینک سفارشی و تفکیک کننده:

posts_nav_link(':::', '<< Newer Posts', 'Older Posts >>');  

default_paging_alt_custom

من استفاده از توابع جداگانه یnext_posts_link وprevious_posts_link را پیشنهاد می کنم زیرا که این کار به شما کنترل بیشتری بر روی عمل جای گذاری لینکتان می دهد و همچنین کد شما را قابل فهم تر خواهد کرد.
صفحه بندی پست تکی
هنگام نمایش پست تکی، خوب است که یک لینک به پست قبلی و بعدی در توالی نشان دهیم. فایل قالب single.php به وسیله ی کد زیر این کار را انجام می دهد:

<nav id="nav-single">
  <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentyeleven' ); ?></h3>
  <span class="nav-previous"><?php previous_post_link( '%link', __( '<span class="meta-nav">←</span> Previous', 'twentyeleven' ) ); ?></span>
  <span class="nav-next"><?php next_post_link( '%link', __( 'Next <span class="meta-nav">→</span>', 'twentyeleven' ) ); ?></span>
</nav><!-- #nav-single -->

single_default

انجام عمل بالا این را به شما خواهد داد:
این توابعnext_post_link وprevious_post_link هستند که لینک های صفحه بندی را در سمت راست بالای صفحه ایجاد می کنند. این توابع دو پارامتر را قبول می کنند که به ما اجازه می دهد خروجی های آنها را به خوبی برای سفارشی کنیم. این پارامترها عبارتند از:

next_post_link( format, link, in_same_cat, excluded_categories );

فرمت و لینک پارامترها با هم کار می کنند. فرمت این است که شما می خواهید لینک چگونه به نظر برسد: %link در فرمت به عنوان یک نگهدارنده برای محتوای لینک پارامتر استفاده می شود، که دقیقا متنی است که ما مایل به استفاده برای این لینک هستیم. بنابراین کد زیر:

previous_post_link( '%link', '<< Next Newest Post' );
next_post_link( '%link', 'Next Oldest Post >>' );

این را به ما خواهد داد:

  چگونه خطای 504 در وردپرس را از بین ببریم؟

single_next_newest

اگر ما می خواستیم عنوان واقعی پست های بعدی یا قبلی را نمایش دهیم، از یک مقدار اولیه ی ویژه ی %title در پارامترهای لینک استفاده می کردیم. بنابراین کد زیر:

previous_post_link( '%link', '<< Previous Post: %title' );
next_post_link( '%link', 'Next Post: %title >>' );

این را به ما خواهد داد:

single_next_title

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

$previous_post_link_image = '<img src="' . get_bloginfo('stylesheet_directory') . '/images/previous_post_link.png" />';
previous_post_link( '%link', $previous_post_link_image );

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

pagination_default

در زیر آن کد وجود دارد که صفحه بندی بالا خروجی حاصل از آن است. بیایید نگاهی به آنچه در آن انجام می شود بیاندازیم:

global $wp_query;

$total_pages = $wp_query->max_num_pages;

if ($total_pages > 1){

  $current_page = max(1, get_query_var('paged'));
  
  echo paginate_links(array(
      'base' => get_pagenum_link(1) . '%_%',
      'format' => '/page/%#%',
      'current' => $current_page,
      'total' => $total_pages,
    ));
}

• سراسری کردن موضوعwp_query و بنابراین ما می توانیم مقدار اولیه یmax_num_pages را بازیابی کنیم: این تعداد کل صفحات نشان داده شده توسط جستجو است.
• صفحه فعلی را به وسیله ی بازیابی متغیر ‘paged’ باget_query_var پیدا کنید: ما از تابع حداکثر برای تبدیل کردن صفحه فعلی به پیش فرض و به 1، استفاده می کنیم
• تابعpaginate_links مجموعه ای از پارامترها را نیاز دارد: چهار عامل مهم تر نمایش داده شده اند
• با تابع get_pagenum_link، URL پایه را برای صفحه بازیابی والگوی %_% را به آن اضافه کنید، که توسط پارامتر فرمت next جایگزین خواهد شد
• در مورد کار ما، یک الگوی فرمت را تعیین کنید که به شکلی که pretty permalinks به نظر می رسد، مطابقت کند (مجموعه ای با %postname% in Admin -> Settings -> Permalinks ) : کد %_% در پارامتر پایه توسط این جایگزین خواهد شد
• صفحات فعلی و کلی را همان طور که قبلا بازیابی شد، تنظیم کنید
با استفاده از pretty permalinks نتایج URL صفحات، چیزی شبیه به این خواهد بود:
http://2011.rosselliot.co.nz/category/honda/page/2/
فراخوانیget_pagenum_link (1) بخشی ازURL را بازیابی خواهد کرد:
http://2011.rosselliot.co.nz/category/honda/
پس از آن ما پارامتر فرمت را برای باقی مانده یURL ارائه خواهیم داد که این خواهد بود:
page/2
بخش ٪ #٪ فرمت شماره صفحه فعلی ما را در خود دارد.
بر اساس این گونه تنظیمات پارامترها،paginate_links مجموعه ای از لینک های صفحه بندی را خروج خواهد داد. شما می توانید کد را به طور مستقیم به یک قالب فایل که کار صفحه بندی را انجام می دهد (مانندcategory.php ) وارد کنید و یا آن را در یک تابع به عنوان فایل functions.php خود ذخیره کنید و سپس آن را از هر قالبی که دوست دارید، فرابخوانید.
paginate_link دارای پارامترهای دیگری هم هست که به شما اجازه می دهد تا به خروجی ها تناسب دهید که اعداد چگونه ظاهر شوند و برچسب ها چه چیزی را بازگو کنند. از مستندات کمک بگیرید. با کمی طراحی ظاهر، نمایش صفحه بندی موثر آسان خواهد بود. با استفاده از این کد اصلاح شده و یک ظاهر طراحی شده اضافه خواهد شد:

global $wp_query;

$total_pages = $wp_query->max_num_pages;

if ($total_pages > 1){

  $current_page = max(1, get_query_var('paged'));
  
  echo '<div class="page_nav">';
  
  echo paginate_links(array(
      'base' => get_pagenum_link(1) . '%_%',
      'format' => '/page/%#%',
      'current' => $current_page,
      'total' => $total_pages,
      'prev_text' => 'Prev',
      'next_text' => 'Next'
    ));

  echo '</div>';
  
}
.page_nav .page-numbers{
  padding:4px 8px;
  margin:0px 4px;
  border:1px solid gray;
  color:#FFB134;  
}
.page_nav .current{
  border:1px solid #FFB134;
  background-color:#FBEFDB;
}
.page_nav .prev, .page_nav .next{
  border:none;
  color:blue;
}

تولید نتیجه ی زیر آسان بود:

pagination_custom

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

آیا این مقاله برای شما مفید بود؟
تقریبا
خیر

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

ارسال دیدگاه به معنی این است که شما ابتدا قوانین ارسال دیدگاه را مطالعه کرده‌اید و با آن موافق هستید.

دیدگاه‌های این نوشته جدید ترین ها شاخص

  1. 8 سال عضو همیار وردپرس

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

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

    سپاسگزارم

  3. سلام
    اگر بخوام مطالب از یک دسته بندی خاص نشون داده بشن باید چه کدی رو اضافه کنم؟

  4. سلام
    چه جوری می تونم فقط url صفحه بعد و یا قبل رو دریافت کنم ؟؟ برای مثال



    توی این کد می خوام فقط مثلا در قسمت href لینک صفحه بعد رو قرار بدم

  5. با سلام
    چطوری میتونم 3 تا صفحه داشته باشم تو wp که تو هر کدوم تعداد پست دلخواه داشته باشم
    اخه تو wp فقط تو صفحه اول میشه تازه ها رو گذاشت و تو بقیه صفحه ها فقط یک پست
    افزونه داره ؟
    خواهشا لینک اموزش کامل بدین
    با تشکر

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

    (حلقه اول)

    مطلب

    روی این حلقه هیچ سوالی ندارم و مشکلی نیست.

    یه حلقه هست که وقتی ما مثلا در صفحه اصلی سایت روی عنوان یک دسته خاص مثلا “آموزش آشپزی” کلیک میکنیم صفحه category.php باز میشه و تمامی مطالبی که مربوط به اون دسته هست به طور خودکار نمایش داده میشه. حلقه اینه:

    (حلقه دوم)

    عنوان مطالب موجود در دسته

    حالا سوال اینه که اگر تعداد پستهای هر دسته زیاد باشه، قاعدتاً باید مطالب رو صفحه بندی کنیم. یعنی به فرض ده تا مطلب اول ” اون دسته بندی مورد نظر ما” نمایش داده بشه و وقتی ما گزینه صفحه بعد رو میزنیم، ده تا مطلب دوم نمایش داده بشه. مشکل چیه؟ تمام آموزشهایی که در خصوص ساخت صفحه بندی در سایتها اومده فقط بر روی حلقه اول که در ابتدا صحبتشو کردم عمل میکنه. ولی تو هیچ آموزشی ندیدم که توضیح بده که چطور ما در داخل برگه category.php خودمون که از حلقه دوم (اون بالا رو نگاه کنید) در اون استفاده شده، صفحه بندی ای رو درست کنیم که روی همین حلقه دوم تاثیر بزاره نه روی حلقه اول. من صفحه بندی رو در category.php خودم درست کردم، اما وقتی میزنم صفحه بعد، سایدبارهام عوض میشه.

    پس لطفا، اگر میشه نحوه ساخت صفحه بندی در داخل category.php رو آموزش بدبد با این فرض که ما از حلقه دوم در قالب اون استفاده کردیم، نه حلقه اول

  7. سلام

    تو صفحه اول یه کادر اصلی دارم یه سری پست توش هست که دسته بندی داره ولی یه کادر دیگه زیرش دارم که اون یه سری دیگه پست توش هست که اونم صفحه بندی لازم دازه وقتی کد صفحه بندی یه دسته خاص رو توی کادر پایین میذارم کد برای کادر بالا اجرا میشه و وقتی روی لینک کلیک میکنم کادر پایین همون صفحه اول رونشون میده ولی بالایی عوض میشه. برای کادر پایین یه صفحه جدا زدم و include کردم به صفحه اصلی .
    تو هردو کادر وقتی روی صفحه دوم کلیک میکنم این ادرس رو میاره http://localhost/wordpress/?paged=2 و فقط دومین صفحه از اولین کادر رو نشون میده.
    لطفا راهنمایی کنید.

  8. 9 سال عضو همیار وردپرس

    چرا برای من جواب نمیدهد.
    تعداد صفحات را نشان میدهد ولی روی هر کدام که کلیک می کنم – مثلا اگر تعداد را روی 10 پست در هر صفحه مشخص کردم – همان 10 پست اول فقط را نشان می دهد.لطفا راهنمایی بفرمایید.

    • 10 سال عضو همیار وردپرس

      سلام
      خب درستش همینه. پس باید چه جوری عمل کنه ؟

    • 9 سال عضو همیار وردپرس

      در هر صفحه 10 مطلبی را که نشان می دهد تکراری است یعنی در صفحه 1 و 2 و 3 و … مطالب یکی است یعنی پست های 1 تا 10 و بقیه را نشان نمیدهد در صورتیکه باید در صفحه 1 مطالب 1 تا 10 و در صفحه 2 مطالب 11 تا 20 و همینطور تا آخر ولی برای من در هر صفحه فقط 10 پست آخر را نشان می دهد.

    • 10 سال عضو همیار وردپرس

      سلام
      چه قالبی؟
      تنظیمات بخش خواندن رو انجام دادید؟

  9. با سلام . در سایتم با صفحه بندی مطالب مشکل دارم .وقتی می خوام صفحه بعدی باز بشه ، صفحه خطا 404 باز می شه.اگر می تونید منو راهنمایی کنید
    سایت اترک نیاز :

    • 10 سال عضو همیار وردپرس

      سلام
      سایت شما یا با پیوندهای یکتا دچار مشکل شده یا اینکه با فایل htaccess. مشکل داره.

  10. با سلام
    در قسمت تنظیمات قالب صحیفه
    قسمت ترجمه
    برای تنظیم شماره صفحات بجای کد Page %CURRENT_PAGE% of %TOTAL_PAGES%
    چه متن فارسی قرار دهیم

    • 10 سال عضو همیار وردپرس

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