صفحه بندی در وردپرس: یک سری مفاهیم اولیه
در این مقاله / آموزش به اصول اولیه ی صفحه بندی در وردپرس، تنظیمات صفحه بندی پیش فرض و چگونه می توان آن را افزایش داد.
طرح صفحه بندی پیش فرض
فراموش نکنید در هنگام صفحه بندی، وردپرس باید بداند که در لیست هر صفحه چند آیتم وجود خواهد داشت. این مقدار اولیه (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 یک لینک را به صفحه قبلی ارسال ها، نمایش می دهد
و تصویر زیر همان چیزی است که در صورت انجام تنظیم دو پست در هر صفحه، به نظر خواهد رسید.
این کار بسیار پیش پا افتاده، اما بسیار کاربردی است. مشکل این گونه نمایش صفحه، این است که هیچ راهی برای گفتن این که در کدام صفحه هستید، و یا در کل چند صفحه وجود دارد، نیست.
یک چیز که باید درباره ی لیست کردن پیش فرض وردپرس به یاد داشته باشید این است که آنها در جهت معکوس اجرا می شوند:
از آنجا که نمایش پست ها معمولا به ترتیب زمانی معکوس طبقه بندی شده اند،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();
و با متن لینک سفارشی و تفکیک کننده:
posts_nav_link(':::', '<< Newer Posts', 'Older Posts >>');
من استفاده از توابع جداگانه ی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 -->
انجام عمل بالا این را به شما خواهد داد:
این توابع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 >>' );
این را به ما خواهد داد:
اگر ما می خواستیم عنوان واقعی پست های بعدی یا قبلی را نمایش دهیم، از یک مقدار اولیه ی ویژه ی %title در پارامترهای لینک استفاده می کردیم. بنابراین کد زیر:
previous_post_link( '%link', '<< Previous Post: %title' ); next_post_link( '%link', 'Next Post: %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 را به ما می دهد. این تابع به ما اجازه می دهد که یک مجموعه واقعی از لینک های صفحه بندی ایجاد کنیم، مانند آنچه که در زیر می بینید:
در زیر آن کد وجود دارد که صفحه بندی بالا خروجی حاصل از آن است. بیایید نگاهی به آنچه در آن انجام می شود بیاندازیم:
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; }
تولید نتیجه ی زیر آسان بود:
آرزو می کنم که شما از مباحث اولیه در صفحه بندی لذت برده باشسد. اگر هر گونه راهنمایی بیشتر در مورد صفحه بندی با وردپرس نیاز دارید، با نوشتن نظرات خود در زیر، به ما اجازه ی کمک دهید.
abolfazlbm 9 سال عضو همیار وردپرس
با سلام.
میخواستم بدمنم که تو یک برگه خاص چطوری یک دسته جداگانه بسازیم؟
http://www.mazandfootball.com/index.php?option=com_joomleague&view=resultsranking&p=1&division=&r=&Itemid=139
که یک دسته بندی در هر صفحه قرار داره.
اگه میشه اموزشش رو بزارین تو سایت
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
منظورتون رو متوجه نشدم!
Peyman
سلام خسته نباشید
من یه مشکل واسم پیش اومده . هیچ کسی نیست که راهنماییم کنه . لطفا شما راهنمایی کنید
من صفحه بندی سایتم رو با هر روشی که انجام میدم . روی لوکال هاست برنامه (easy php) درست کار میکنه و نمایش
داده میشه . ولی روی هاست اصلا نمایش داده نمیشه
از افزونه های:
wp-pagenavi
wp-page-numbers
و انواع روش های بدون افزونه رو امتحان کردم . کاملا دقیق و اصولی
ولی روی هاست اصلا شماره صفحه بندی ها نمایش داده نمیشه(تنظیمات خواندن داخل مدیریت رو هم تغییر دادم ولی فایده نداشت)
ولی اکه داخل آدرس بار مرورگر شماره صفحه رو وارد کنم وارد اون صفحه میشه و کار میکنه
قالب سایتم رو خودم طراحی کردم . که اشکال از قالب نیست
حتی قالب های دیگه هم از اینترنت دانلود کردم و امتحان کردم که ببینم مشکل از قالب منه یا نه . که بازم کار نکرد و نمایش داده
نشد
قالب هایی که دانلود کردم و استفاده کردم واسه تست:
sahifa
jarida
13Floor
Downloadha
و قالب های مشهور دیگه
ولی فایده نداشت
لطفا شما راهنمایی کنید مشکل از چیه
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
با این توضیحی که شما میدید من نمیدونم چی بگم، فقط میتونم بگم آدرس سایتتون رو بدید من ببینم
Peyman
سلام خانوم کوهستانی
ممنونم از اینکه جواب دادید
آدرس سایت من:
n-oob.ir
اگه لطف کنید یه نگاه به سایت بندازید ببینید مشکل از کجاست
و اگه واقعا منو شرمنده کنید . من رمز و یوزر ادمین و هاست رو در اختیارتون قرار بدم و شما یه نگاه کامل تری داشته باشید ببینید کجای کار من اشتباه بوده…
و اگه بتونید یه قالب که فقط صفحه بندی داشته باشه رو بتونید نصب کنید
اصلا مهم نیست چه قالبی باشه!! فقط صفحه بندی داشته باشه.همین
من واقعا به این سایت نیاز دارم . چند روزه از کار و زندگی افتادم و نمیدونم چجوری درستش کنم … و هیچ جایی حرفه ای تر از سایت شما نمیشناسم
اگه هزینه ای هم داشته باشه پرداخت میکنم . فقط لطف کنید . راهنمایی کنید
واقعا دیوانم کرده این مشکل
سپاسگزارم از شما و سایت خوبتون
منتظر جوابتون هستم . ممنونم
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
دوست عزیز تعداد نوشته های پیش فرض شما در صفحه ی اول 5 تا است. در تنظیمات ببینید تعداد روی چند قرار گرفته، شاید باید بیش از اینها پست بذارید که صفحه بندی بشه
Peyman
سلام خانوم کوهستانی
نه مشکل از این نیست . پست زیاد دارم . ولی نمایش داده نمیشن
نمیشه شما یه نگاهی به پنل مدیریتی و کدها بندازین؟؟؟لطفا
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
متاسفانه این مورد در حوزه ی فعالیت های من نیست.
پیشنهاد من به شما اینه که در بخش تنظیمات خواندن همه موارد رو چک کنید.
البته بستگی داره قالب شما برای صفحه ی نخست روی نوشته ی تازه باشه یا یک برگه ی یکتا
با اینها امتحان کنید ببینید چه اتفاقی میفته
it94
سلام من یک مشکل فوری دارم لطفا کمک….من ازاین تابع برای صفحه بندی پستهای یک category استفاده کردم ولی وقتی روی لینک صفحات میرم به جای نمایش بقیه پست ها میره به صفحه index.phpواین در حالیه که آدرس url من …/category/sub-category/page/3یه همچین چیزی رو نمایش میده.
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
دقیقا کدها رو میشه بگید کجاها قرار دادید ؟
علی اصغر
با سلام من میخوام نوشته هامو در custom post type که نوشتم . صفحه بندی کنم . چکار کنم . ممنون
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
باید مرحله مرحله کد نویسی بشه
شعرنما
آقا من چکار کنم که صفحه بندی هام ایندکس نشن؟
بهاره کوهستانی 10 سال عضو همیار وردپرس
سلام
یعنی چه طور باشه ؟ توضیح بیشتری میدید ؟
mohsen
سلام. من صفحه بندی گذاشتم اما یه قسمتی گوشه ی صفحه دارم که تمام مطالب اون کتگوری رو نشون میده از وقتی صفحه بندی گذاشتم اون هم صفحه بندی شده ، من چیکار باید کنم؟
محمد جواد فرکاریان 10 سال عضو همیار وردپرس
سلام
لطفا طبق اموزش ارائه شده پیش برید
افزونه برسی شد و مشکلی نداشت
تشکر
حسن احمدی
عالی بود ممنون
مسعود
واقعا . خیلی ممنون از کمکی که کردید
مسعود
ممنون از پاسخ جنابعالی
وب سایت بنده psdtut.ir است که در صفحه اصلی آن ۹ تا پست دارم که میخواهم زیر آن ها تعداد صفحات افزوده شود تا هرچه پست میگذارم پست های قدیمی به صفحات بعدی منتقل شوند . روش هایی که شما گفتید و یا حتی افزونه های متعددی نصب کردم اما کد فراخوان را هرجا میزارم چیزی افزوده نمیشود . حالا چه چیزی غیر از این اطلاعات نیاز است تا بگم ….
ممنون
مسعود
با سلام
میخواستم اگر امکان دارد صفحه بندی آیتم های صفحه اصلیم را زحمتش را بکشید چون هرکاری کردم نشد چون آیتم های صفحه اصلی من Portfolio هستند نه پست بنابراین صفحه بندی آن برام سخت بود
ممنون میشم جواب را ایمیل کنید واسم چون اینجا چک نمیکنم . هزینه آن را هم پرداخت میکنم . فقط اطلاع بدید چه چیزی نیاز دارید که زحمتش را بکشید
حسین رحیمی 10 سال عضو همیار وردپرس
با سلام و احترام.ما نمیتونیم روی چنین پروژه هایی کار کنیم همینجا مشکل رو کامل مطرح کنید بگید از چه قالبی استفاده می کنید تا دوستان کمک کنند.