חיפוש ]

מודיפיקציה לשאילתות של עמודי ארכיון (Archive Queries)

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

מה אם אתם מעוניינים למיין את הפוסטים באותו עמוד ארכיון באופן שונה או לבצע לצורך העניין מודיפיקציה לשאילתה המתבצעת? (שאילתה = Query).

רוצים לדעת איזה תבנית קובץ תהיה בשימוש עבור עמוד מסויים? תנו מבט בפוסט המדבר על ההיררכיה של תבניות עמוד בוורדפרס.

מודיפיקציה לשאילתה – Modifying the Query

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

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

<?php
function sv_archive_per_page( $query ) {
    if ( is_tax( 'category' ) ) {
        $query->set( 'posts_per_page', 20 );
    }
}
add_filter( 'pre_get_posts', 'sv_archive_per_page' );

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

<?php
function sv_home_custom_query( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', [ 'post', 'product' ] );
        $query->set( 'orderby', 'title' );
        $query->set( 'order', 'ASC' );
    }
}
add_filter( 'pre_get_posts', 'sv_home_custom_query' );

שימו לב שאנו משתמשים בתנאים כמו $query->is_home(). אם לא נשתמש באלו, השינויים יישומו על כל השאילתות של וורדפרס ויגרמו לתוצאות שאינם רצויות.

רועי יוסף
רועי יוסף

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

0 תגובות...

תגובה חדשה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...