שליפת פוסטים באמצעות שאילתא מותאמת אישית בוורדפרס

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

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

הלולאה הבסיסית

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

<?php 
if (have_posts()) :
	while ( have_posts() ) : the_post();
?>
	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
		<?php the_excerpt(); ?>
	</div>
<?php
	endwhile;
endif;
?>

מה יש לנו כאן? בסך הכל כמה שורות פשוטות 🙂
בואו נעבור עליהן:

שורה 2: מבצעת קריאה אל ()wp_query->have_posts$ המצעת בדיקה האם קיימים פוסטים רלוונטיים לעמוד.
שורה 3: בשורה זו בעצם נכנסו אל הלולאה ומיד לאחר מכן קראנו ל- ()wp_query->the_post$ על ידי ()the_post אשר יוצרת את המשתנה הגולבלי post$.
שורות 5-8: בשורות אלו הדפסנו ב-div פשוט את כותרת והתוכן של הפוסט.
שורה 9: בשורה זו סגרנו את הלולאה.
שורה 10: שורה זו סוגרת את ה-if שביצענו.

אז אילו עוד פרטים יכלנו להציג בתוך הלולאה? המון, באמצעות פונקציות מדליקות, כמה דוגמאות:

()the_tags – תדפיס את התגיות המשוייכות לפוסט.
()get_the_date – תחזיר את תאריך כתיבת הפוסט.
()the_category – תדפיס קישורים לקטגוריות שאליהן משוייך הפוסט הנוכחי.
()the_excerpt – תדפיס את תקציר הפוסט.
()the_permalink – תדפיס את הקישור לפוסט הנוכחי.

שליפת פוסטים על ידי שאילתא מותאמת אישית

וורדפרס מאפשרת לנו לבצע שאילתא מותאמת אישית באמצעות מספר אפשרויות:query_posts, WP_Query ו-get_posts.
אני לא ארחיב יותר מדי, ניתן לראות שרשור ארוך ודי מסכם כאן.
אתם גם מוזמנים לקרוא מספר מאמרים נוספים העוסקים בנושא באמצעות חיפוש קצר, אני לפחות, הולך עם דעת הרוב ועובד עם WP_Query.

WP_Query

אז איך עובדים עם WP_Query? דוגמא:

<?php 
$custom_query = new WP_Query( 'cat=4' );
if ($custom_query->have_posts()) :
	while($custom_query->have_posts()) : $custom_query->the_post();
?>
	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
		<?php the_excerpt(); ?>
	</div>
<?php
	endwhile;
endif;
wp_reset_postdata(); //reset the query
?>

בדוגמא זו למשל, ביצענו בידיוק את אותה הלולאה שביצענו בלולאה הבסיסית אבל עם שינוי אחד קטן ומשמעותי – הפוסטים שיוצגו בלולאה יהיו פוסטים המשוכיים לקטגוריה שה-ID הוא 4.
חשוב מאוד לשים לב כי את הפניה לשאילתא הכנסו אל המשתנה בשם custom_query, משתנה זה חייב להופיע גם בבדיקה האם קיימים פוסטים (have_posts) וגם ביצירת המשתנה הגלובלי "post" באמצעות the_post.
אני רוצה שתשימו לב לפרט חשוב נוסף הנמצא בשורה מספר 14, איפסנו את השאילתא בסיום העבודה עמה, זהו צעד חשוב מאוד.

העברת מספר ארגומנטים

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

<?php 
$args = array(
	'post_type' => 'jobs',
	'posts_per_page' => 20,
	'post__not_in' => array(4,6,23),
);
$custom_query = new WP_Query( $args );
if ($custom_query->have_posts()) :
	while($custom_query->have_posts()) : $custom_query->the_post();
?>
	<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
		<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
		<?php the_excerpt(); ?>
	</div>
<?php
	endwhile;
endif;
wp_reset_postdata();
?>

בדוגמא זו ניתן לראות כי העברנו מספר ארגומנטים:

post_type – הגדרת סוג התוכן שישלף, (post, page, post type ועוד), כאן למשל, הצגנו post type על ידי כתיבת שמו – jobs.
posts_per_page – מספר הפוסטים שישלפו.
post__not_in – ה-IDים של הפוסטים שלא נרצה שישלפו.

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

נהנת ממאמר זה? הירשם לרשימת התפוצה וקבל עדכונים על מאמרים חדשים!


4 תגובות בנושא “שליפת פוסטים באמצעות שאילתא מותאמת אישית בוורדפרס”

  1. שאלה: למה צריך את ה-if שבודק האם יש פוסטים? הרי אם אין פוסטים לא נכנסים כלל ל-while כי גם בו יש בדיקה דומה.
    לא?
    אולי אני מפספס משהו כי אני לא מכיר PHP מספיק טוב

    מעבר לזה אני מאוד אוהב את הפוסטים שלך!

    1. היי ניר, קודם כל תודה רבה 🙂
      באופן כללי אתה די צודק אבל ה-if ימנע מאיתנו להיכנס ללולאה מלכתחילה.
      ה-have posts שבתוך הלולאה קיים לשימוש הלולאה – שתדע מתי "לעצור".
      אם נדבר בהקשר של וורדפרס בלבד ולא PHP באופן כללי, יש גם נימוק מפורט בשאלה זהה לשלך בקישור הבא, אתה מוזמן לקרוא ולהחכים 🙂
      https://wordpress.stackexchange.com/questions/117219/why-should-i-put-ifhave-posts-is-whilehave-posts-not-enough

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *