דפדוף – מספר פוסטים שונה בעמודים שונים

באתר אחד מקסים שבניתי (יעלה לאויר בקרוב) נדרשתי להציג פוסטים מסויימים בתצוגה קצת שונה בין העמוד הראשון לאלו שאחריו.

העמוד הראשון כלל תצוגה של פוסט אחד בגדול ואחריו 12 פוסטים קטנים ואילו העמודים הבאים כללו רק 12 פוסטים.

על מנת לשחק עם מספר הפוסטים בעמוד הוספתי hook כך שבקריאה לפונקציה   pre_get_posts תקרא פונקציה שאני כתבתי.

והנה הפונקציה:

/* funation to control num-of-post in YTV archive*/
function wpsites_query( $query ) {
$page_num = get_query_var( 'paged', 1 );
//echo 'page_num = '.$page_num;
 if ( $query->is_archive() && is_post_type_archive('ytv') && $query->is_main_query() && !is_admin() && ($page_num<2) ) {
 $query->set( 'posts_per_page', 13 );
 }
 else if ( $query->is_archive() && is_post_type_archive('ytv') && $query->is_main_query() && !is_admin()) {

 $query->set( 'posts_per_page', 12 );
 $query->set( 'offset', ((($page_num-1)*12)+1) );
 }
}
add_action( 'pre_get_posts', 'wpsites_query' );
/*--------------------------------------------------*/

.

 

בשלב הראשון בדקתי שאני בסוג הפוסט הרלוונטי

אחר כך בדקתי באיזה עמוד אני

במקרה שאני בעמוד הראשון הודעתי לו שאני צריכה 13 פוסטים

אחרת (במקרה שאני בעמוד השני והלאה) הודעתי שאני צריכה 12 פוסטים.

נוצרה בעיה שבעמוד השני השאילתה הביאה לי את הפוסטים  13-24 כאשר פוסט 13 כבר הוצג בעמוד הראשון. הייתי צריכה לעדכן את השאילתה כך שתתחיל מפוסט אחד יותר.

לשם כך דאגתי לעדכן את משתנה ה offset שיתחיל מ13(עבור העמוד הראשון) ועוד 12 * מספר העמודים (כנגד כל עמוד נוסף) כך שקיבלתי את הפוסטים בסדר הגיוני בלי קפיצות ובלי כפילויות.

המתמטיקה היא 12 פוסטים כנגד על עמוד (עמוד 1 יתחיל מפוסט 0 ועמוד שני יתחיל מפוסט 12) + 1 בשביל העמוד הראשון.

השאר תגובה