חיפוש ]

הוספת כפתור לטעינת פוסטים נוספים באמצעות AJAX

כפתורי "טעינת פוסטים נוספים" (Load More) מבוססי AJAX הם דרך מצוינת לשפר את חוויית המשתמש בכך שהם מאפשרים לטעון פוסטים נוספים באופן דינמי מבלי לרענן את הדף. במדריך זה נציג שלבים ליישום כפתור מסוג זה באתרי וורדפרס ללא צורך בתוספים צד שלישי.

מדוע להשתמש בכפתור טעינת פוסטים נוספים מבוסס AJAX?

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

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

הנה השלבים שיש לבצע בכדי להוסיף כפתור לטעינת פוסטים נוספים (Load More) באמצעות AJAX:

שלב 1: התאמת השאילתה בוורדפרס

לפני שנוכל ליישם את פונקציונליות ה-AJAX עלינו להתאים את השאילתה של וורדפרס כדי לתמוך בעימוד (pagination). הוסיפו את הקוד הבא לקובץ functions.php של התבנית שלכם:


function my_load_more_posts() {
    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 6, // התאימו בהתאם לצורך
        'paged' => $paged,
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
            get_template_part('template-parts/content', get_post_format()); // התאימו בהתאם למבנה התבנית שלכם
        endwhile;
    endif;

    wp_reset_postdata();
    die();
}
add_action('wp_ajax_my_load_more', 'my_load_more_posts');
add_action('wp_ajax_nopriv_my_load_more', 'my_load_more_posts');

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

שלב 2: טעינת קובץ ה-JavaScript

כעת נטען את קובץ ה-JavaScript שיפעיל את בקשת ה-AJAX כאשר המשתמש ילחץ על כפתור "טעינת פוסטים נוספים". הוסיפו את הקוד הבא לקובץ functions.php של התבנית שלכם:


function enqueue_load_more_script() {
    wp_enqueue_script(
        'load-more',
        get_template_directory_uri() . '/js/load-more.js',
        array('jquery'),
        null,
        true
    );

    wp_localize_script('load-more', 'load_more_params', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'current_page' => 1,
        'max_page' => $GLOBALS['wp_query']->max_num_pages,
    ));
}
add_action('wp_enqueue_scripts', 'enqueue_load_more_script');

פונקציה זו טוענת את קובץ ה-JavaScript ומעבירה פרמטרים רלוונטיים כמו כתובת ה-AJAX ומספר העמוד המקסימלי לסקריפט.

שלב 3: יצירת קובץ ה-JavaScript

כעת, צרו קובץ חדש בשם load-more.js בתיקיית js של התבנית שלכם והוסיפו את קוד ה-JavaScript הבא:


jQuery(function($) {
    var canLoadMore = true;
    var currentPage = load_more_params.current_page;
    var maxPage = load_more_params.max_page;

    $('#load-more-button').on('click', function() {
        if (currentPage < maxPage && canLoadMore) { canLoadMore = false; currentPage++; $.ajax({ url: load_more_params.ajax_url, type: 'POST', data: { action: 'my_load_more', page: currentPage }, success: function(response) { if (response) { $('.post-list').append(response); // התאימו בהתאם למבנה התבנית שלכם canLoadMore = true; if (currentPage >= maxPage) {
                            $('#load-more-button').hide(); // הסתרת הכפתור כאשר נגמרו העמודים
                        }
                    }
                },
                error: function() {
                    console.log('Failed to load more posts.');
                }
            });
        }
    });
});

סקריפט זה מפעיל את בקשת ה-AJAX כאשר המשתמש לוחץ על כפתור "טעינת פוסטים נוספים". מעבר לכך הוא מגדיל את מספר העמודים ומוסיף את הפוסטים החדשים לרשימה הקיימת.

שלב 4: הוספת כפתור טעינת פוסטים נוספים לתבנית

כעת, עליכם להוסיף את כפתור "טעינת פוסטים נוספים" לתבנית הפוסטים שלכם. מצאו את הקובץ הרלוונטי כמו index.php או archive.php, והוסיפו את הכפתור לאחר לולאת הפוסטים:

<?php
echo '<div class="post-list">';
?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <?php get_template_part('template-parts/content', get_post_format()); ?>
    <?php endwhile; endif; ?>
<?php
echo '</div>';
?>
<button id="load-more-button">טעינת פוסטים נוספים</button>

כפתור זה יפעיל את ה-JavaScript לטעינת פוסטים נוספים בעת לחיצה.

תאימות דפדפנים ואופטימיזציה לביצועים

למרות שפתרון זה אמור לעבוד ברוב הדפדפנים המודרניים, מומלץ לבדוק את הפונקציונליות בדפדפנים ומכשירים שונים. אם אתם חווים בעיות ביצועים עקב קריאות AJAX מרובות, ניתן לבצע אופטימיזציה לאירוע הגלילה (scroll event) באמצעות requestAnimationFrame. הנה דוגמה:


var ticking = false;

$('#load-more-button').on('click', function() {
    if (!ticking) {
        window.requestAnimationFrame(function() {
            // לוגיקת טעינת פוסטים נוספים כאן
            ticking = false;
        });
        ticking = true;
    }
});

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

הוספת חלופה לעימוד מסורתי

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


if (function_exists('the_posts_pagination')) {
    the_posts_pagination();
}

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

שיקולי SEO עבור כפתור טעינת פוסטים נוספים מבוסס AJAX

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

  • ודאו שכל התוכן נגיש דרך עימוד מסורתי כחלופה.
  • השתמשו בנתונים מובנים (כגון Schema.org) כדי לעזור למנועי החיפוש להבין את התוכן.
  • השתמשו בתגי rel="next" ו-rel="prev" לציון סדר התוכן בעימוד.

התמודדות עם מקרים חריגים ושגיאות

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


if (!response || currentPage >= maxPage) {
    canLoadMore = false;
    $('#load-more-button').text('אין עוד פוסטים לטעון');
} else {
    $('.post-list').append(response);
    canLoadMore = true;
}

בכך תבטיחו חוויית משתמש חלקה גם אם המשתמש הגיע לסוף התוכן.

סיכום

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

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

רועי יוסף
רועי יוסף

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

0 תגובות...

תגובה חדשה

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