בפוסט קצר זה אני יוצא מנקודת הנחה כי ברשותכם ידע בסיסי על דרך העבודה עם הקלאס WP_Query בוורדפרס. לפני שנתחיל, ניתן מספר דוגמאות בסיסיות, בדומה לאלו שתמצאו ב WordPress Codex. השימוש באלו רלוונטי כשאתם מעוניינים ליצור פילטר כלשהו לפוסטים או חיפוש מתקדם בוורדפרס או בחנות ווקומרס.
אז כפי שלבטח אתם יודעים, לכל הפוסטים ניתן להוסיף שדות מטא (metadata) תחת הבוקסה ״שדות מיוחדים״, הלא הם Custom Fields.
לדוגמה, אם אתם מעוניינים לשלוף את כל הפוסטים בעלי שם (meta key) הנקרא show_on_homepage ובעלי ערך (meta value) השווה ל on, תוכלו לבצע זאת בצורה הבאה:
$sv_args = array(
'meta_key' => 'show_on_homepage',
'meta_value' => 'on'
);
$sv_query = new WP_Query( $sv_args );
לעומת זאת, אם אתם מעוניינים לשלוף את כל הפוסטים, אך לא את אלו בעלי השם והערך המוזכרים מעלה תבצעו זאת בצורה הבאה עם הפרמטרים הבאים:
$sv_args = array(
'meta_key' => 'show_on_homepage',
'meta_value' => 'on',
'meta_compare' => '!='
);
$sv_query = new WP_Query( $sv_args );
שימו לב כי הדוגמאות בפוסט זה מופשטות וחסרים מספר פרמטרים של WP_Query כגון
posts_per_page
אוpost_type
.
אלו שתי דוגמאות מאד בסיסיות. פוסט זה בעיקרון הינו על הפרמטר meta_query
, פרמטר זה מאפשר לכם ליצור פילטרים ממש מגניבים לפוסטים או למוצרים שלכם.
דוגמאות שימוש ב meta_query
שליפת פוסטים עם ערך ספציפי בשדה המיוחד
דוגמה פשוטה, נשלוף את כל הפוסטים להם שדה מיוחד בשם color בעל הערך white:
// the meta_key 'color' with the meta_value 'white'
$sv_args = array(
'meta_query' => array(
array(
'key' => 'color',
'value' => 'white'
)
)
);
$sv_query = new WP_Query( $sv_args );
אם תיגשו לממשק הניהול של וורדפרס ותתנו מבט בעמוד העריכה של כל אחד מאותם פוסטים שיחזרו בלולאה זו, תמצאו את השדה המיוחד הבא:
בכדי לשלוף את כל הפוסטים אך לא את אלו בעלי שדה color עם הערך white:
$sv_args = array(
'meta_query' => array(
array(
'key' => 'color',
'value' => 'white',
'compare' => '!='
)
)
);
$sv_query = new WP_Query( $sv_args );
כעת בואו נשלוף את כל הפוסטים עם הערך white או green:
// custom field name is color and custom field value is 'white' OR 'green'
$sv_args = array(
'meta_query' => array(
array(
'key' => 'color',
'value' => array('white','green'),
'compare' => 'IN'
)
)
);
$sv_query = new WP_Query( $sv_args );
שליפת כל הפוסטים (מוצרים בחנות ווקומרס לצורך העניין) חוץ ממוצרים לבנים או ירוקים:
$sv_args = array(
'meta_query' => array(
array(
'key' => 'color',
'value' => array('white','green'),
'compare' => 'NOT IN'
)
)
);
$sv_query = new WP_Query( $sv_args );
שליפת כל השדות בטווח נומרי מסויים
לדוגמה, בואו נפלטר בחנות ווקומרס את כל המוצרים שמחירם נע בין 2000 ל 4000:
// the product price is more than 2000 and less than 4000
$sv_args = array(
'meta_query' => array(
array(
'key' => 'price',
'value' => array( 2000, 4000 ),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
)
);
$sv_query = new WP_Query( $sv_args );
השוואה נומרית
בדוגמה הבאה נפלטר את כל המוצרים שמחירם 2000 ומעלה:
$sv_args = array(
'meta_query' => array(
array(
'key' => 'price',
'value' => 2000,
'type' => 'numeric',
'compare' => '>='
)
)
);
$sv_query = new WP_Query( $sv_args );
מוצרים שמחירם נמוך מ 4000:
$sv_args = array(
'meta_query' => array(
array(
'key' => 'price',
'value' => 4000,
'type' => 'numeric',
'compare' => '<'
)
)
);
$sv_query = new WP_Query( $sv_args );
שליפת פוסטים לפי מספר שדות מיוחדים
בואו נשלב מספר מהדוגמאות שהצגנו קודם לכן:
// the 'color' is 'white' AND the 'price' is more than 2000 and less than 4000
$sv_args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'show_on_homepage',
'value' => 'on'
),
array(
'relation' => 'OR',
array(
'key' => 'color',
'value' => 'white'
),
array(
'key' => 'price',
'value' => array( 2000, 4000 ),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
)
)
);
$sv_query = new WP_Query( $sv_args );