דף הבית » טריקים וטיפים, מומלצים

לסנן את תוצאות החיפוש בוורדפרס

21 בפברואר 2010 | מאת רמי | 4 תגובות | תגיות: , , ,

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

חיפוש

חיפוש

הבעיה

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

הפתרון

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

Array (
    [s] =>
    [error] =>
    [m] =>
    [p] =>
    [post_parent] =>
    [subpost] =>
    [subpost_id] =>
    [attachment] =>
    [attachment_id] =>
    [name] =>
    [hour] =>
    [static] =>
    [pagename] =>
    [page_id] =>
    [second] =>
    [minute] =>
    [day] =>
    [monthnum] =>
    [year] =>
    [w] =>
    [category_name] =>
    [tag] =>
    [cat] =>
    [tag_id] =>
    [author_name] =>
    [feed] =>
    [tb] =>
    [paged] =>
    [comments_popup] =>
    [meta_key] =>
    [meta_value] =>
    [preview] =>
    [category__in] =>
    [category__not_in] =>
    [category__and] =>
    [post__in] =>
    [post__not_in] =>
    [tag__in] =>
    [tag__not_in] =>
    [tag__and] =>
    [tag_slug__in] =>
    [tag_slug__and] =>
    [post_type] =>
    [caller_get_posts] =>
    [suppress_filters] =>
    [posts_per_page] =>
    [nopaging] =>
    [comments_per_page] =>
    [search_terms] =>
    [order] =>
    [orderby] =>
)

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

הקוד

כדי לסנן תוצאות חיפוש, נשתמש בפילטר pre_get_posts, את הקוד הבא נוסיף לקובץ functions.php בערכת העיצוב:

function search_filter($query) {
    if ($query->is_search) { $query->set('post_type', 'post'); }
    return $query;
}
add_filter('pre_get_posts', 'search_filter');

אנו בודקים האם מדובר בחיפוש ($query->is_search) ואם כן, מגדירים משנה שהחיפוש יבוצע רק על פוסטים ולא על עמודים set('post_type', 'post').

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

באותו נושא

מאת רמי

מייסד האתר והעורך ראשי שלו. מפתח אתרים מבוססי וורדפרס, תורם (מדי פעם) לפיתוח המערכת, פעיל בקודקס האנגלי, אחראי על אתר וורדפרס בעברית, אחראי על תרגום וורדפרס לעברית, והחל מגרסה 3.3 אחראי על שחרור גרסאות וורדפרס בעברית.

4 תגובות »

  • ariel כותב :

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

  • יאיר כותב :

    יש תוסף בשם חפש הכל
    Search Everything
    https://redmine.sproutventure.com/projects/show/search-everything

  • ariel כותב :

    אני מכיר את התוסף הנ"ל. אבל אני מאמין שבשביל זה יש איזה קוד פונקציונאלי שמסדר את העניין, זה עדיף מבחינתי על תוסף.
    אבל תודה בכל אופן

הוסף תגובה !

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

תגיות HTML מורשות לשימוש:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>