חיפוש ]

וורדפרס WP_Query: סינון פוסטים לפי שדות מטא

בפוסט קצר זה אני יוצא מנקודת הנחה כי ברשותכם ידע בסיסי על דרך העבודה עם הקלאס 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 );

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

Custom Fields Metabox

בכדי לשלוף את כל הפוסטים אך לא את אלו בעלי שדה 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 );
0 תגובות...

תגובה חדשה

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

Savvy WordPress Development