رابط /random/ في ووردبريس 7.2: مقال عشوائي بدون إضافة

حجر نرد مضيء يختار بطاقة مقال من شبكة مقالات، تعبيراً عن رابط مقال عشوائي في ووردبريس 7.2

عندك مدونة فيها مئات المقالات القديمة ومحدش بيوصلها غير من جوجل؟ ووردبريس 7.2 جايب حل صغير ولطيف: زر «اقرأ مقالاً عشوائياً» من غير ولا إضافة. بس الميزة شغالة تلقائياً، فلازم تعرف هي بتعمل إيه قبل ما تتفاجئ بيها على موقع عميل.

ما الذي يضيفه ووردبريس 7.2 بالضبط؟

يضيف الإصدار 7.2 مساراً جديداً هو /random/. أي زائر يفتح example.com/random/ يُحوَّل إلى مقال منشور يُختار عشوائياً. الميزة مفعّلة افتراضياً، ومبنية على أدوات موجودة أصلاً في النواة: قواعد إعادة الكتابة (Rewrite Rules)، والكلاس WP، واستعلام ووردبريس (WP_Query).

قبل ذلك كان هذا السلوك يحتاج إضافة خارجية، وكانت التذكرة #64498 قد طرحت الفكرة بأن تبنى الميزة على واجهات الاستعلام والتوجيه الموجودة بدلاً من كود جديد بالكامل. النتيجة أن أي تخصيص تعرفه لـ pre_get_posts يعمل هنا كما هو.

ملاحظة: هذه الميزة جزء من ووردبريس 7.2 الذي لم يصدر بعد بصيغته النهائية. اختبرها على نسخة تجريبية (Staging)، ويمكنك الرجوع إلى مقالنا عن ووردبريس 7.2 بيتا 1 لطريقة تشغيل النسخة التجريبية.

الروابط العشوائية المتاحة

البادئة random تُضاف أمام مسارات الأرشيف الموجودة. مع الروابط الدائمة (Permalink) بصيغتها الجميلة، تحصل على هذه المسارات:

الرابطإلى أين يحوّل الزائر
/random/مقال عشوائي من كل المقالات
/random/category/<slug>/مقال عشوائي داخل تصنيف معيّن
/random/tag/<slug>/مقال عشوائي يحمل وسماً معيّناً
/random/author/<username>/مقال عشوائي لكاتب معيّن
/random/<post-type-slug>/عنصر عشوائي من نوع محتوى مخصص مؤهل

أي تصنيف مخصص (Taxonomy) قابل للاستعلام علناً ومرتبط بنوع محتوى مؤهل يحصل على مسار مشابه. يعني لو عندك تصنيف «مدن» على نوع محتوى «عقارات»، ستجد رابطاً عشوائياً لكل مدينة.

البادئة نفسها قابلة للترجمة والتغيير من حقل جديد في صفحة الإعدادات ← الروابط الدائمة (wp-admin/options-permalink.php). على موقع عربي يمكنك تغييرها إلى كلمة تناسب جمهورك، لكن اختر كلمة لاتينية قصيرة إن كنت لا تريد روابط مُرمّزة طويلة عند المشاركة.

ووردبريس 7.2

الروابط العشوائية الجديدة

كلها تحوّل الزائر إلى عنصر منشور واحد يُختار عشوائياً

  • /random/

    كل المقالات

    مقال عشوائي من المقالات المنشورة.

  • /random/category/

    داخل تصنيف

    مقال عشوائي من تصنيف معيّن، ومثله الوسوم والتصنيفات المخصصة.

  • /random/author/

    لكاتب معيّن

    مقال عشوائي من مقالات كاتب واحد.

  • randomable

    أنواع المحتوى المخصصة

    مؤهلة افتراضياً إن كان لها أرشيف وقابلة للاستعلام علناً.

ابن موقعك قطعة قطعةarabcms.com

أي أنواع المحتوى تدخل في الاختيار؟

أضاف ووردبريس وسيطاً جديداً اسمه randomable إلى register_post_type(). إن لم تحدده، تكون قيمته true لكل نوع محتوى يجمع شرطين: publicly_queryable وhas_archive. من الأنواع المدمجة، المقالات (post) مؤهلة، أما الصفحات (page) والمرفقات (attachment) فلا.

لاستبعاد نوع محتوى مخصص (Custom Post Type) تسجّله بنفسك، مرّر القيمة false:

register_post_type(
        'musicals',
        array(
                'public'      => true,
                'has_archive' => true,
                'randomable'  => false, // Keep musicals out of /random/.
        )
);

في JetEngine: أنواع المحتوى التي تنشئها من JetEngine لا تُسجَّل في ملف تكتبه أنت، لكن ووردبريس يمرر وسائط كل نوع محتوى على الفلتر القياسي register_post_type_args. استخدمه لتغيير randomable لنوع معيّن دون لمس إعدادات JetEngine، وتذكّر أن أي نوع فعّلت له خيار الأرشيف سيدخل الاختيار العشوائي تلقائياً:

add_filter(
        'register_post_type_args',
        static function ( $args, $post_type ) {
                if ( 'properties' === $post_type ) {
                        $args['randomable'] = false;
                }
                return $args;
        },
        10,
        2
);

كيف تتحكم في المقال الذي يظهر؟

الاختيار يتم عبر الاستعلام الرئيسي نفسه. الدالة WP::handle_random() تشغّله بعد إضافة ثلاث دوال مؤقتة طوال الطلب: wp_random_content_pre_get_posts() على pre_get_posts، وwp_random_content_posts_orderby() على posts_orderby، وwp_random_content_post_limits() على post_limits. معاً تقصر الاستعلام على العناصر المؤهلة، وترتّبه بـ RAND()، وتأخذ صفاً واحداً.

النتيجة العملية: أي كود عندك على pre_get_posts يخصّص أرشيفاً سينطبق أيضاً على الرابط العشوائي لهذا الأرشيف. ولو أردت تعديلاً يخص الطلبات العشوائية وحدها، استخدم الدالة الجديدة wp_is_random_content_query(). المثال التالي يستبعد تصنيفاً برقم معرّفه:

add_action(
        'pre_get_posts',
        static function ( WP_Query $query ) {
                if ( wp_is_random_content_query( $query ) ) {
                        $query->set( 'category__not_in', array( 525600 ) );
                }
        }
);

استخدامات عملية لهذا الشرط على موقعك:

  • استبعاد تصنيف الأخبار القديمة أو الإعلانات المنتهية حتى لا يصل إليها الزائر.
  • قصر الاختيار على مقالات بحقل مخصص معيّن، مثل المقالات «دائمة الصلاحية».
  • استبعاد المقالات المدعومة (Sponsored) من الاقتراح العشوائي.

إيقاف الميزة تماماً

لو الميزة لا تناسب موقع عميل، مثل موقع شركة ليس فيه مدونة حقيقية، أوقفها بالفلتر wp_enable_random_content_redirect. ضع السطر في إضافة إلزامية (Must-Use Plugin) داخل wp-content/mu-plugins/ حتى لا يعطّله أحد بالخطأ:

<?php
// wp-content/mu-plugins/disable-random-redirect.php
add_filter( 'wp_enable_random_content_redirect', '__return_false' );

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

تنبيه: بعد تفعيل الفلتر أو تغيير البادئة، افتح صفحة الروابط الدائمة واضغط «حفظ التغييرات» لتحديث قواعد إعادة الكتابة إن لم تتحدث الروابط مباشرة.

قبل التحديث: ثلاثة أشياء راجعها على موقعك

بصراحة: هذا القسم قراءة لملاحظة المطورين الرسمية وليس نتيجة اختبار على موقع حي، لذلك هو قائمة فحص وليس حكماً نهائياً.

  • صفحة أو مقال اسمه random: لو عندك صفحة رابطها /random/ بالفعل، اختبر أيهما يظهر بعد التحديث على النسخة التجريبية، وغيّر البادئة من صفحة الروابط الدائمة إن تعارضا.
  • الكاش: الرابط تحويل وليس صفحة ثابتة. لو كانت إضافة الكاش أو الـ CDN تخزّن التحويلات، فقد يرى كل الزوار المقال نفسه. افتح الرابط عدة مرات من متصفح خاص وتأكد أنه يتغير، وإن لم يتغير فاستثن المسار من الكاش.
  • المواقع الكبيرة: الترتيب بـ RAND() في MySQL يمر على كل الصفوف المؤهلة قبل اختيار واحد. على موقع بعشرات الآلاف من المقالات راقب زمن الاستجابة لهذا الرابط، وقلّص نطاقه بـ wp_is_random_content_query() إن لزم.

فكرة سريعة للاستخدام

في Elementor: أضف زراً في قالب المقال المفرد (Single Post) من الـ Theme Builder (منشئ القوالب)، واجعل رابطه /random/ أو /random/category/<slug>/ ليبقى الزائر داخل نفس الموضوع. على مدونة دروس عربية، زر «درس عشوائي من نفس القسم» يعيد الحياة لمحتوى قديم بلا أي إضافة ولا استعلام إضافي في الصفحة نفسها.

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

س: هل يعمل رابط /random/ على الصفحات أيضاً؟
ج: لا. الصفحات والمرفقات غير مؤهلة افتراضياً، والمقالات وأنواع المحتوى المخصصة التي لها أرشيف هي المؤهلة.

س: كيف أوقف المقال العشوائي في ووردبريس 7.2؟
ج: أضف الفلتر wp_enable_random_content_redirect بقيمة __return_false في إضافة إلزامية، فتختفي القواعد وحقل الإعدادات معاً.

س: هل أستطيع تغيير كلمة random في الرابط؟
ج: نعم، من حقل جديد في صفحة الإعدادات ← الروابط الدائمة، والبادئة قابلة للترجمة أيضاً.

س: هل أحتاج إضافة Random Post بعد التحديث؟
ج: غالباً لا إن كان كل ما تحتاجه هو التحويل إلى مقال عشوائي. احتفظ بالإضافة فقط إن كانت تقدم شيئاً آخر مثل عرض مقالات عشوائية داخل الصفحة.

الخلاصة

ووردبريس 7.2 يحوّل فكرة «مقال عشوائي» إلى جزء من النواة: رابط واحد، ووسيط randomable للتحكم في أنواع المحتوى، وفلتر واحد للإيقاف. جرّب الرابط على نسخة تجريبية من موقعك دلوقتي، وقرر هتستغله في زر «اقرأ حاجة تانية» ولا هتقفله قبل ما التحديث يوصل.

مراجع إضافية: #64498: Add core support for random content redirects

مرجع المقال (بالإنجليزية): Your Content Is Going To Get More Random!
المقال ده مش ترجمة حرفية: متكيّف للقارئ العربي ومضاف عليه سياق ووردبريس وElementor وJetEngine.

اترك تعليقاً