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

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

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

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

חיפוש

חיפוש

הבעיה

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

הפתרון

קיימים מספר פתרונות, חלקם יפים, חלקם מכוערים, חלקם פשוטים וחלקם מורכבים. אנו נתמקד בפתרון מבוסס פילטרים, שלדעתי הוא הפתרון הנוח והיעיל ביותר. הפתרון מבוסס על 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').

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

מאת רמי

אחראי על אתר וורדפרס בעברית ועל תרגום ושחרור גרסאות וורדפרס בעברית. מפתח ליבה, בכל גרסה החל מגרסה 2.8, מפתח מוביל בגרסה 4.4 ובגרסה 4.6. מספק שירותי פיתוח אתרים, פיתוח תוספי וורדפרס לסטרטאפים ופיתוח כלים למפתחי וורדפרס - GenerateWP.com.

8 תגובות »

  • ariel כותב :

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

  • יאיר כותב :

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

  • ariel כותב :

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

  • lfwebim כותב :

    אני מעוניין להשמיט מתוצאות החיפוש דפים ו/או פוסטים מסויימים. יש דרך להכניס את זה לאיזשהו string עם OR ביניהם כך שאותן תוצאות לא תוצגנה בחיפוש ?!

  • רמי כותב :

    היי lfwebim, אני ממליץ לך לצלול לקוד של WP_Query Class.

  • איציק כותב :

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

  • רמי כותב :

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

הוסף תגובה !

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

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