ملف search.php

درس صفحة نتائج البحث (search.php) في ووردبريس

1. مقدمة: أهمية صفحة نتائج البحث

صفحة نتائج البحث هي واحدة من أهم صفحات الموقع، لأن معظم الزوار ممكن يوصلوا لمحتوى معين من خلالها. تصميم الصفحة بشكل كويس بيخلي تجربة البحث سهلة وسريعة، ويخلي الزائر يلاقي اللي بيدور عليه من غير تعب.

لو الصفحة دي مش واضحة أو شكلها مش مرتب، الزوار ممكن يطلعوا بسرعة ويخسر الموقع زيارات ومتابعين.

2. كيف بيشتغل نظام البحث في ووردبريس؟

ووردبريس بيستخدم دالة get_search_query() عشان يحصل على الكلمة اللي الباحث كتبها، وبعدين يجيب المقالات أو الصفحات اللي فيها الكلمة دي في العنوان أو المحتوى.

الكود اللي بينفذ البحث بيتم في الخلفية، والنتائج بتظهر في صفحة خاصة اسمها search.php أو لو مش موجودة، بتظهر في index.php.

3. إنشاء ملف search.php في القالب

لو عايز تتحكم في شكل صفحة البحث بتاعتك، لازم تعمل ملف اسمه search.php في فولدر القالب.

هيكل ملف search.php الأساسي

<?php get_header(); ?>

<div class="search-results-container">
    <h1>نتائج البحث عن: "<?php echo get_search_query(); ?>"</h1>

    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <div class="post-meta">
                    بتاريخ: <?php the_date(); ?> | الكاتب: <?php the_author(); ?>
                </div>
                <div class="post-excerpt">
                    <?php the_excerpt(); ?>
                </div>
            </article>
        <?php endwhile; ?>

        <div class="pagination">
            <?php
            the_posts_pagination(array(
                'mid_size' => 2,
                'prev_text' => __('« السابق'),
                'next_text' => __('التالي »'),
            ));
            ?>
        </div>

    <?php else : ?>
        <p>عذرًا، لم يتم العثور على نتائج للبحث عن "<?php echo get_search_query(); ?>"</p>
        <p>حاول كلمات بحث مختلفة أو قم بالبحث مرة أخرى:</p>
        <?php get_search_form(); ?>
    <?php endif; ?>
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

4. تصميم صفحة نتائج البحث بشكل جذاب

صفحة البحث لازم تكون واضحة وسهلة التصفح، وتدي الزائر كل التفاصيل اللي تساعده يختار المقال المناسب.

نصائح تصميم:

  • عنوان واضح: بيظهر الكلمة اللي الباحث كتبها
  • عرض مقتطف من المقال: يساعد في اختيار المقال المناسب
  • عرض التاريخ والمؤلف: لزيادة الثقة في المحتوى
  • استخدام ألوان متناسقة مع تصميم الموقع
  • ترتيب النتائج بشكل منطقي، مثلاً حسب الأحدث أو الأكثر صلة
  • نموذج بحث ثاني في حالة عدم وجود نتائج

5. عرض نتائج البحث مع التفاصيل

كل نتيجة بحث لازم تعرض:

  • عنوان المقال (رابط قابل للضغط)
  • تاريخ النشر
  • اسم الكاتب
  • مقتطف (Excerpt) من المقال
  • صورة مصغرة (لو متاحة)

كود عملي مع صورة مصغرة في صفحة البحث

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <?php if (has_post_thumbnail()) : ?>
        <a href="<?php the_permalink(); ?>">
            <?php the_post_thumbnail('thumbnail'); ?>
        </a>
    <?php endif; ?>

    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <div class="post-meta">
        بتاريخ: <?php the_date(); ?> | الكاتب: <?php the_author(); ?>
    </div>
    <div class="post-excerpt">
        <?php the_excerpt(); ?>
    </div>
</article>

6. التعامل مع عدم وجود نتائج بحث

مهم جداً إنك تعطي الزائر رسالة واضحة لما البحث ما يطلعش على أي حاجة، وتوفر له نموذج بحث جديد.

مثال رسالة عدم وجود نتائج

<?php if (!have_posts()) : ?>
    <p>مع الأسف، ما فيش نتائج للبحث عن "<?php echo get_search_query(); ?>"</p>
    <p>جرب كلمات بحث تانية أو عدل البحث.</p>
    <?php get_search_form(); ?>
<?php endif; ?>

7. تحسين تجربة المستخدم في صفحة البحث

  • إضافة زر إعادة البحث
  • عرض كلمات مفتاحية شائعة (Popular Keywords)
  • توفير خيارات تصفية البحث (حسب التاريخ، التصنيف، المؤلف)
  • دعم البحث في أنواع منشورات مخصصة (Custom Post Types)

8. إضافة نموذج البحث في القالب

لو مش موجود عندك نموذج بحث في الهيدر أو السايدبار، تقدر تضيف النموذج باستخدام دالة ووردبريس get_search_form().

نموذج بحث بسيط داخل الهيدر

<form role="search" method="get" class="search-form" action="<?php echo home_url('/'); ?>">
    <label>
        <span class="screen-reader-text">ابحث عن:</span>
        <input type="search" class="search-field" placeholder="اكتب كلمة البحث..." value="<?php echo get_search_query(); ?>" name="s" />
    </label>
    <button type="submit" class="search-submit">بحث</button>
</form>

9. تحسين أداء البحث والفلترة

البحث في أنواع منشورات مخصصة

لو عندك أنواع منشورات مخصصة (Custom Post Types) وعايز تظهرها في نتائج البحث، لازم تعدل الاستعلام في functions.php:

function custom_search_filter($query) {
    if ($query->is_search && !is_admin()) {
        $query->set('post_type', array('post', 'page', 'your_custom_post_type'));
    }
    return $query;
}
add_filter('pre_get_posts', 'custom_search_filter');

فلترة البحث حسب التصنيف أو تاريخ النشر

تقدر تضيف فلتر في صفحة البحث باستخدام استمارة أو أكواد PHP للتحكم في نتائج البحث.

10. مراجعة سريعة

  • صفحة البحث مهمة جداً لتجربة المستخدم
  • ملف search.php مسؤول عن عرض نتائج البحث
  • لازم تعرض عنوان البحث، قائمة النتائج بشكل منظم، ونموذج بحث عند عدم وجود نتائج
  • استخدم صور مصغرة، تواريخ، وأسماء مؤلفين لتعزيز العرض
  • تحسين الاستعلام ليشمل أنواع منشورات مخصصة بيساعد في نتائج أدق
  • دائمًا اختبر صفحة البحث على أكثر من جهاز

11. أسئلة شائعة

س: هل ممكن أستخدم ملف index.php بدل search.php؟
ج: أيوه، لو مش عامل ملف search.php، ووردبريس هيستخدم index.php كبديل.

س: إزاي أخلي صفحة البحث تعرض فقط المقالات؟
ج: في functions.php، استخدم فلتر pre_get_posts وعدل post_type عشان تختار المقالات فقط.

س: هل ممكن أضيف فلتر للتاريخ أو التصنيف في صفحة البحث؟
ج: أيوه، ممكن تضيف استمارة فلترة مع كود PHP لتعديل الاستعلام.

س: هل يمكنني تحسين سرعة البحث؟
ج: نعم، باستخدام إضافات متخصصة للبحث، وتحسين الكود، والاعتماد على كاش (Caching).