
السلام عليكم ورحمة الله, إذا أردنا التحقق أو معرفة ما إذا كان كاتب المقالة قد كتب أو نشر عددا معينا من المقالات من قبل وذلك لوضع شرط مثلا حتى لا يظهر نص معين أو رابط معين إلا للأعضاء الذين لديهم عدد معين من المقالات منشورة على موقعنا, ولفعل ذلك نستخدم الدالة التالية:
count_user_posts()
مع استدعاء خانة post_author من جدول post وذلك لاستدعاء رقم عضوية الكاتب :
$post->post_author
ثم نضع المتغير بعدد المقالات التي نريد حيث وضعت هنا 1:
$nm_posts = 1;
فيصبح الكود كالتالي:
$nm_posts = 1;
if (count_user_posts( $post->post_author ) >= $nm_posts) {
echo "هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط";
}
ثم نضع الكود في القالب الذي يحتوي على المقالة كأسفل المقالة مثلا.
أما إذا أردنا أن نضع الشرط في أي مكان للعضو حسب رقم عضويته, نضع التالي (في مثالنا هذا وضعت رقم العضوية 1):
$nm_posts = 1;
if (count_user_posts( 1 ) >= $nm_posts) {
echo "هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط";
}
الآن نستفيد من الكود السابق لنصنع معا شرطا للعضو المتصل أي المستخدم المتصل ببياناته حيث يظهر له الشرط إذا كان يملك مقالا واحدا فأكثر, إذن في هذه الحالة نستخدم الدالة التالية:
wp_get_current_user()
ونضعها مكان رقم العضوية أي مكان 1 بمعنى أننا عوض أن نتحقق من عدد مقالات العضوية 1 نتحقق من عدد مقالات العضو المتصل مهما كان رقم عضويته والشرط في هذه الحالة سيظهر لأي عضو متصل إذا تحقق شرط نشره لمقال واحد فأكثر, إذن الكود في الأخير سيكون كالتالي:
$nm_posts = 1;
$user = wp_get_current_user();
if (count_user_posts( $user->ID ) >= $nm_posts) {
echo "هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط";
}
كذلك يمكن فعل ذلك عن طريق الاستعلام من قاعدة البيانات مباشرة لكن هذه المرة عن طريق إنشاء وظيفة جديدة ووضعها في ملف functions.php ثم استدعاء الوظيفة في القالب لأننا لا نستطيع وضع الدوال أو الوظائف مباشرة في القوالب وإنما نضعها في الملف المخصص لها ألا وهو functions.php إذن أولا ننشيء وظيفة هكذا:
function ben_current_user_post_count(){
}
ثم نضع بداخلها السطر التالي للاستعلام من جدول posts ونضع له شروطا وهي أن يكون post_author يساوي رقم عضوية العضو المتصل ثم نوع المقالة post_type يساوي post ثم نشترط أن تكون المقالة منشورة post_status يساوي publish ثم نضع السطر كله في متغير ولنسميه مثلا $post_count ثم نضع قبل السطر المتغير العام الخاص بقاعدة بيانات الووردبريس global $wpdb; ثم أسفل المتغير الدالة الخاصة بالتحقق من العضو المتصل ونضعها كذلك في متغير هكذا $user = wp_get_current_user(); لتصبح الوظيفة ben_current_user_post_count التي أنشأناها هكذا:
function ben_current_user_post_count(){
global $wpdb;
$user = wp_get_current_user();
$post_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $user->ID AND post_type IN ('post') and post_status = 'publish'" );
}
بقي الآن وضع الشرط والمتغير الذي يساوي عدد المقالات التي نريد تحديدها للشرط:
$nm_posts = 1;
if ($post_count >= $nm_posts)
return "هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط";
لتصبح الوظيفة أو الدالة في الأخير هكذا:
function ben_current_user_post_count(){
global $wpdb;
$user = wp_get_current_user();
$post_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $user->ID AND post_type IN ('post') and post_status = 'publish'" );
$nm_posts = 1;
if ($post_count >= $nm_posts)
return "هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط";
}
ثم لإظهار المحتوى الذي وضعناه في الشرط نستدعي الوظيفة أو الدالة بوضع السطر التالي في أي مكان نريد في القالب:
<?php if ( function_exists('ben_current_user_post_count') ) {echo ben_current_user_post_count();} ?>
الفكرة ببساطة هي أننا نعرف كيف نستغل البرمجة المفتوحة للوردبريس حتى نطور ما نريد لصالحنا ولصالح مواقعنا المهم أن تكون لديك خلفية بأساسيات لغة php وشيء من html و java والووردبريس طبعا.
ملاحظة: من أراد نقل الموضوع إلى مدونته وجب عليه ذكر المصدر: https://benaceur-php.com/?p=2243
بالتفويق
رابط الموضوع للنسخ
السلام عليكم
تابعت الشرح الجميل وفي الحقيقة قد استفدت من هذه الأكواد لكن لدي سؤال من فضلك ما دور هذا:
وعليكم السلام
هذا يسمى المتغير في لغة php مثل الرياضيات تماما نحدد قيمة ما هكذا مثلا:
h = 2 و k = 4 و m = k+h إذا غيّرنا مثلا h إلى h = 3 سيتغير m ليساوي 7
بالنسبة للغة php فقط نضيف رمز الدولار $ هكذا:
$h = 2;
المهم أن يتكون المتغير من حروف لاتينية وأرقام ورمز under_score الذي هو _
وأن لايبدأ برقم.
أما رقم 2 الذي يلي حرف h يسمى القيمة
ويستعمل المتغير عادة لتسهيل البرمجة كالاختصار مثلا, مثلا عندنا سطر كبير هكذا:
(هنا المحتوى الذي نريد ظهوره إذا تحقق الشرط)
فبدل أن نكرره في كل مرة نضعه كقيمة في متغير مثل:
———————–
في موضوعنا أنا وضعت المتغير والشرط هكذا:
يمكن أن نضع القيمة مباشرة في الشرط:
شكرا على الإجابة المفصلة والواضحة شكرا مرة أخرى
لو ما فيها إزعاج عندي استفسار آخر من فضلكم هل هناك طريقة لإظهار النص أو الكود بدون فتح القالب والتعديل يعني مباشرة هل ممكن
وشكرا
نعم يمكن ذلك عن طريق الهوك hook لكن يبقى تحديد المكان في القالب محدود حيث لا يمكننا وضع أو استدعاء الدالة في المكان الذي نرغب بالتحديد إذ يوجد أماكن محددة موجود فيها الهوك وذلك في الهيدر أو أسفل الهيدر وفي الفوتر أسفل الموقع وفي المقال أسفله أو أعلاه.
فمثلا لوضعه في الهيدر نستعمل wp_head وفي الفوتر wp_footer وفي المقال the_content
نضعه الآن مثلا في الهيدر حيث سيكون الكود هكذا:
وفي هذه الحالة لا يلزمنا استدعاء الدالة بوضع السطر التالي في القالب:
أي لا نضعه.
شكرا جزيلا أخي وبارك الله فيك على التوضيح وآسف على الإزعاج