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

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

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

  راه اندازی بخش سوالات رایج در وردپرس بدون افزونه

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. با سلام
    من در سایت وردپرس خودم نوشته ای دارم که به علت طولانی بودن میخوام تا در چند صفحه نمایش داده بشه
    با استفاده از افزونه TinyMCE تونستم جاهایی که میخواستم Page Break تعریف کنم و نوشته رو به سه صفحه تبدیل کردم
    اما مشکل اینجاست که همه مطالب نوشته در این سه صفحه نمایش داده میشه و در واقع هرسه صفحه یکی هست!
    خیلی سرچ کردم اما نتونستم مشکل رو حل کنم لطفا کمکم کنید
    ممنون