إعدادات ظهور المقالات (Post Visibility Settings)
بمجرد نشر مقال (أو صفحة) في ووردبريس، يصبح مرئياً للعامة (بشكل افتراضي). بلغة ووردبريس، هذا يعني أن المقال الذي يحمل حالة منشور (Published) تكون له رؤية افتراضية كـ عام (Public)، بناءً على الإعدادات الموجودة في صندوق النشر لشاشة تحرير المقال.
يوفر ووردبريس أيضاً خيارين أقل علنية لـ ظهور المحتوى الخاص بمقالك. يؤدي النقر فوق رابط "تحرير" بجوار الرؤية: عام (Visibility: Public) إلى ظهور ثلاثة أزرار اختيار (Radio Buttons):
- يتم تحديد خيار عام (Public) بشكل افتراضي.
- تحديد خيار محمي بكلمة مرور (Password protected) يظهر حقل نص لإدخال كلمة مرور ستكون مطلوبة لعرض هذا المقال. تقتصر كلمة المرور على 20 حرفاً كحد أقصى.
- تحديد خيار خاص (Private) يجعل مقالك مرئياً فقط لمستخدمي موقعك الذين يحملون دور مدير أو محرر (Administrator or Editor).
عند الانتهاء من تحرير إعدادات ظهور المقال، انقر فوق زر "موافق" (OK). يجب أن ترى الآن الإعداد الجديد لمقالك، على سبيل المثال: الرؤية: محمي بكلمة مرور (Visibility: Password Protected). تذكر: لا يسرى تغيير الإعداد حتى تنقر فوق زر "نشر" (Publish) (أو "تحديث" (Update) إذا كان المقال منشوراً بالفعل).
العثور على كلمة المرور أو تغييرها
فقط المدير (Administrator) أو المحرر (Editor) أو كاتب المقال (Author) يمكنهم تغيير كلمة مرور المقال أو إعدادات الرؤية. للقيام بذلك، استخدم رابط "الرؤية: تحرير" (Visibility: Edit) مرة أخرى. تتوفر هذه الإعدادات أيضاً باستخدام رابط التحرير السريع (Quick Edit) الخاص بالمقال في شاشة "كل المقالات".
يعد رابط "تحرير" الخاص بالرؤية (أو "التحرير السريع") طريقة جيدة أيضاً للكشف عن كلمة مرور مقال نُسيت.
المقالات المحمية بكلمة مرور
يعرض ووردبريس المقال المحمي بكلمة مرور بشكل مختلف. حيث يقوم بالعديد من التغييرات على المقال كالتالي:
- العنوان (Title)– يضيف نص "محمي: " (Protected: ) قبل عنوان المقال.
- المقتطف (Excerpt)– بدلاً من مقتطف المقال، يعرض هذا النص: "لا يوجد مقتطف لأن هذا مقال محمي." (There is no excerpt because this is a protected post.)
- المحتوى (Content)– بدلاً من محتوى المقال، يعرض نموذج كلمة مرور مع هذا النص: "هذا المقال محمي بكلمة مرور. لعرضه، يرجى إدخال كلمة المرور أدناه:" (This post is password protected. To view it please enter your password below:)
لذلك، فإن المقال المحمي بكلمة مرور والذي يحمل عنوان "مقالي" (My Post) سيظهر بهذا الشكل:
حماية العديد من المقالات والصفحات بكلمة مرور
يقوم ووردبريس بتخزين كلمة المرور هذه في ملف تعريف ارتباط (Cookie) الخاص بالمتصفح حتى لا يضطر القراء إلى إعادة إدخال كلمات المرور إذا زاروا نفس الصفحة عدة مرات. علاوة على ذلك، إذا كانت عدة مقالات تستخدم نفس كلمة المرور، فسيتعين على القارئ إدخال كلمة المرور مرة واحدة فقط للوصول إلى كل مقال (راجع التنبيه أدناه).
سيتتبع ووردبريس كلمة مرور واحدة في كل مرة. لذلك، إذا استخدم مقالان كلمتي مرور مختلفتين، فإن إدخال كلمة المرور للمقال (أ)، ثم إدخال كلمة المرور للمقال (ب)، يعني أن إعادة زيارة المقال (أ) (أو أي مقال يشارك كلمة المرور الخاصة به) سيتطلب من المستخدم إعادة إدخال كلمة المرور الخاصة بالمقال (أ).
حماية الحقول المخصصة (Custom Fields)
لا يعرض ووردبريس محتوى أو مقتطف المقال المحمي بكلمة مرور إلا بعد إدخال كلمة المرور الصحيحة. ولكن بيانات الحقول المخصصة للمقال غير محمية، ويمكن أن تظل تظهر. لإيقاف طباعة الحقول المخصصة، قم بلف استدعاءات الدالة get_post_meta (على سبيل المثال، في ملف single.php أو page.php) بعبارة شرطية باستخدام: post_password_required. تتحقق هذه الوظيفة الواحدة في ووردبريس مما إذا كان مقالك يتطلب كلمة مرور وما إذا تم توفير كلمة المرور الصحيحة:
<?php
if ( ! post_password_required() ) {
// كود لجلب وطباعة الحقول المخصصة، مثل:
$key_1_value_1 = get_post_meta( $post->ID, 'key_1', true );
echo $key_1_value_1;
}
?>
تكون دالة post_password_required داخل جملة شرطية (if) مفيدة أيضاً للتخصيصات الأخرى، مثل منع المقالات المحمية بكلمة مرور من الظهور في القوائم.
تخصيص النص المحمي
باستخدام مرشحات ووردبريس (WordPress Filters) يمكنك: تغيير النص الافتراضي في نموذج كلمة المرور، وتغيير النص الافتراضي لمقتطف المقال المحمي بكلمة مرور، وإدراج نموذج كلمة المرور في مقتطف المقال. للقيام بذلك، أضف الكود التالي إلى ملف الإضافة المخصص (custom plugin) الخاص بك.
نص نموذج كلمة المرور
يعرض نموذج كلمة المرور هذه الرسالة الافتراضية: “This post is password protected. To view it please enter your password below:” سيقوم الكود التالي بإرجاع النموذج بنص مختلف وبنية HTML مختلفة — في هذا المثال الرسالة المخصصة هي: “لعرض هذا المقال المحمي، أدخل كلمة المرور أدناه:” (To view this protected post, enter the password below:)
<?php
function my_password_form() {
global $post;
$label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
$o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
' . __( "لعرض هذا المقال المحمي، أدخل كلمة المرور أدناه:" ) . '
<label for="' . $label . '">' . __( "كلمة المرور:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "إرسال" ) . '" />
</form>
';
return $o;
}
add_filter( 'the_password_form', 'my_password_form' );
?>
ملاحظة هامة: يجب أن تقوم دالة my_password_form بإرجاع قيمة (return): لا تستخدم print أو echo.
حد حجم كلمة المرور
تأكد من تعيين قيمة المعامل maxlength على 20 عند استبدال نموذج حماية كلمة المرور، حيث سيقوم ووردبريس بحفظ أول 20 حرفاً فقط بسبب قيود قاعدة البيانات.
نص المقتطف المحمي
المقتطف الافتراضي للمقال المحمي بكلمة مرور هو: “There is no excerpt because this is a protected post.” سيقوم هذا الكود باستبدال هذا النص بالنص الخاص بك — مع السماح باستخدام HTML:
<?php
function my_excerpt_protected( $excerpt ) {
if ( post_password_required() )
$excerpt = '<em>[هذا محمي بكلمة مرور.]</em>';
return $excerpt;
}
add_filter( 'the_excerpt', 'my_excerpt_protected' );
?>
استبدل “<em>[هذا محمي بكلمة مرور.]</em>” برسالة المقتطف المحمي بكلمة مرور المخصصة لك.
إضافة نموذج كلمة المرور إلى المقتطف
خيار آخر لمقتطفاتك المحمية وهو طباعة نموذج كلمة المرور بدلاً من رسالة المقتطف. بهذه الطريقة يدخل الأشخاص كلمة المرور مباشرة من صفحة الفهرس (Index) أو الأرشيف. بعد ذلك، عندما ينقرون على رابط العنوان، سيرون المحتوى. باستخدام دالة get_the_password_form، يمكنك جعل نموذج كلمة المرور بمثابة المقتطف لمقال محمي بكلمة مرور:
<?php
function my_excerpt_password_form( $excerpt ) {
if ( post_password_required() )
$excerpt = get_the_password_form();
return $excerpt;
}
add_filter( 'the_excerpt', 'my_excerpt_password_form' );
?>
سيؤدي هذا إلى جلب نموذج كلمة المرور والنص الافتراضي لووردبريس أو أي تخصيصات قمت بها. لفهم أفضل لكيفية عمل post_password_required() و get_the_password_form()، اقرأ تعريفات وظائفهما في ملف wp-includes/post-template.php.
في نفس ملف النواة (Core) لووردبريس، ستجد أيضاً مرشحات the_excerpt و the_password_form، ودوال get_the_excerpt() و get_the_title() و get_the_content(). تتحكم هذه الدوال في كيفية عرض عنوان المقال ومقتطفه ومحتواه، اعتماداً على إعداد الرؤية الخاص به.
إخفاء المقالات المحمية بكلمة مرور
في بعض الأحيان، لا ترغب في ظهور مقالاتك المحمية بكلمة مرور في أماكن أخرى حول موقعك، مثل الصفحة الرئيسية أو صفحات الأرشيف. لإخفائها بفعالية من هذه الصفحات دون التأثير على الترقيم (Pagination)، ضع الكود التالي في ملف الإضافة المخصص الخاص بك:
<?php
// مرشح لإخفاء المقالات المحمية
function exclude_protected($where) {
global $wpdb;
return $where .= " AND {$wpdb->posts}.post_password = '' ";
}
// تحديد أين يتم عرضها
function exclude_protected_action($query) {
if( !is_single() && !is_page() && !is_admin() ) {
add_filter( 'posts_where', 'exclude_protected' );
}
}
// إجراء لجدولة المرشح في الوقت المناسب
add_action('pre_get_posts', 'exclude_protected_action');
?>
يعمل هذا الكود في جزأين: الجزء الأول يزيل بفعالية أي مقالات محمية بكلمة مرور مباشرة من أي استعلام SQL يقوم ووردبريس بتشغيله، باستخدام مرشح posts_where. يضيف الجزء الثاني هذا المرشح إلى جميع الصفحات باستثناء المقالات المفردة والصفحات وصفحات الإدارة.
لمزيد من المعلومات حول سبب كون pre_get_posts هو الإجراء المناسب لهذه الدالة، راجع مرجع إجراء pre_get_posts.
تغيير عمر ملف تعريف الارتباط (Cookie lifetime)
راجع https://developer.wordpress.org/reference/hooks/post_password_expires/