על מנת לשנות את מספר הפוסטים המופיעים בעמודי הארכיון של סוג תוכן מותאם כלשהו, ניתן להשתמש בפעולה pre_get_posts שאולי אתם כבר מכירים.
כברירת מחדל, מספר הפוסטים שיופיעו הוא מה שנקבע בהגדרות המופיעות בלוח הבקרה של וורדפרס תחת הגדרות > קריאה תחת האפשרות בעמוד הראשי ובעמודי ארכיון יוצגו לכל היותר X פוסטים. אך ייתכן ותרצו שמספר זה יהיה שונה בפוסטים סטנדרטים לעומת פוסטים של סוגי תוכן מותאמים שיצרתם בעצמכם (או שנוצרו על ידי תוסף כלשהו).
הפעולה pre_get_posts
מתנהגת כמעין פילטר לשאילתא הראשית שרצה בעמוד, ואם אתם מעוניינים לשנות את מספר התוצאות בשאילתא זו נכון ויעיל יותר יהיה להשתמש ב pre_get_posts
מאשר ליצור שאילתא חדשה באמצעות WP_Query
. הנה הקוד באמצעותו ניתן לבצע זאת:
// Display all posts on XXXXXX Archive Page
function sv_cpt_page( $query ) {
if ( !is_admin() && $query->is_main_query() && is_post_type_archive( 'XXXXXXX' ) ) {
$query->set( 'posts_per_page', '-1' );
}
}
add_action( 'pre_get_posts', 'sv_cpt_page' );
שימו לב כי עליכם להחליף את XXXXXX בשם בו רשמתם את אותו Custom Post Type.
במקרה זה, כל הפוסטים בעמוד הארכיון של סוג התוכן מסוג XXXXXX יופיעו מכיוון והשתמשנו ב 1- עבור הפרמטר posts_per_page
. באפשרותכם כמובן לשנותו לאיזה מספר שתרצו.
באותה מידה, אם תרצו לבצע זאת עבור טקסונומיה מסויימת, ניתן לבצע זאת בצורה הבאה:
// Display all posts on XXXXXX tax Page
function sv_tax_page( $query ) {
if ( !is_admin() && $query->is_main_query() && is_tax('project_category') ) {
$query->set( 'posts_per_page', '-1' );
}
}
add_action( 'pre_get_posts', 'sv_tax_page' );
בשני המצבים השימוש ב !is_admin
נעשה בכדי לא להשפיע על ממשק הניהול של וורדפרס. השימוש ב $query->is_main_query
מוודא כי אף שאילתא אחרת לא תושפע מהגדרה זו.
באפשרותכם להשתמש בדרך זה על מנת לשנות פרמטרים נוספים עבור אותה שאילתא והנה מספר דוגמאות:
$query->set( 'orderby', 'title' );
$query->set( 'order', 'DSC' );
$query->set( 'post__not_in', array(7,11) ); // Exclude Posts
$query->set( 'cat', '-1,-1257' ); // Exclude Categories
$query->set( 'cat', '153' ); // Include Categories
אתם מוזמנים לראות את הערכים השונים עבור פרמטרים אלו ב Codex.