اظهار قائمة بالتصنيفات الفرعية داخل التصنيف الرئيسي

في مقالة جديدة من مقالات تطوير قوالب ووردبريس نتعرف سوياً اليوم عن طريقة إظهار قائمة بالتصنيفات الفرعية داخل صفحة كل تصنيف رئيسي.
display_subcategories_for_each_parent_001

نبدأ بسم الله..

تكوين مصفوفة بالتصنيفات الفرعية

يمكنك استخدام قالب فرعي لتطبيق الدرس بدلا من التعديل المباشر على ملفات القالب

سنستخدم قالب TwentyFourteen كمثال لتطبيق الدرس عليه؛ لذا سنقوم الآن بالذهاب إلى مجلد القالب ونفتح ملف category.php ، ونضع به الكود التالي:

لاحظ: هذا الجزء من الكود ينقصه وسم الاغلاق الخاص بـ PHP لانه سيغلق في الجزء التالي من الكود
			<?php
				$args = array(
					'child_of' => get_query_var( 'cat' ), // Here we put the ID of the current category.
				);
				
				$children = get_categories( $args );

في الكود السابق:
– أولا قمنا بتعريف متغير $args ووضعنا به مصفوفة بالـخيارات “Parameters” التي نريد تطبيقها على الدالة get_categories().
– الخيار الوحيد المطلوب لتطبيق درسنا هو ‘child_of’، وهذا الخيار “البارمتر” يأخذ قيمة رقمية عبارة عن معرّف التصنيف الذي نريد جلب التصنيفات الفرعية الخاصة به؛ وقد قمنا بتعيين قيمته وهي get_query_var( ‘cat’ ).
– الدالة get_query_var()، هي دالة تقوم بجلب القيمة الحالية لاي متغير من متغيرات الاستعلام في ووردبريس والمتمثل في الكائن WP_Query، المتغير الذي نريد جلب قيمته هو ‘cat’ ويمثل المعرّف الخاص بالتصنيف الذي نريد جلب التصنيفات الفرعية الخاصة به.

– أخيراً؛ قمنا بتعريف متغير باسم $children واسندنا اليه الدالة get_categories()، هذه الدالة تقوم بارجاع مصفوفة كل عنصر فيها عبارة عن كائن يمثل احد التصنيفات، وبالطبع المصفوفة التي سيتم ارجاعها تنطبق عليها الخصائص التي تم تعريفها في البارمتر $args كما عرفنا.

قد لا تظهر التصنيفات الفرعية رغم وجودها داخل التصنيف الرئيسي اذا كانت فارغة، يمكنك اظهارها بوضع بارمتر hide_empty بقيمة false. التفاصيل هنا

إظهار قائمة التصنيفات الفرعية

مباشرة بعد الكود السابق نضع هذا الكود:

				if ( ! empty( $children ) ) { ?>
				<h2 class="page-title children-list-title">التصنيفات الفرعية</h2>
				
				<ul class="children-list">
				<?php	foreach ( $children as $child ) { ?>
					
					<li><a href="<?php echo get_category_link( $child->term_id ); ?>"><span class="genericon genericon-category"></span> <?php echo $child->name; ?></a></li>
					
				<?php	} ?>
				</ul>
				<?php } ?>

في الكود السابق:
قمنا أولا بالتأكد أن المصفوفة $children غير فارغة – أي ان التصنيف الحالي به تصنيفات فرعية بالفعل – ثم قمنا بوضع عنوان “التصنيفات الفرعية” وبعدها قمنا باستخدام foreach للدوران داخل المصفوفة وعرض عناصرها.
– نلاحظ اننا لعرض رابط التصنيف استخدمنا دالة get_category_link() والتي تقوم بجلب رابط التصنيف اعتمادا على المعرّف الخاص به.

لاحظ ان بعض القوالب لا تحتوي ملف category.php وتستخدم ملف index.php او ملف achive.php؛ إذا كان الامر كذلك عليك التحقق اولا ان الصفحة المعروضة عبارة عن تصنيف كما يلي:
<?php if ( is_category() ) {
 // هنا تضع الكود الذي سيتم تطبيقه في التصنيف فقط
 } ?>

تنسيق قائمة التصنيفات الفرعية

كما تعرف؛ عليك ان تستخدم الـ CSS لتظهر قائمتك بشكل جيد مناسب للقالب، يمكنك استخدام الكود التالي او عمل التنسيقات الخاصة بك – والتي ستكون اجمل بالطبع 🙂 – :

.children-list-title {
	padding-right:10px;
}
.children-list {
	list-style-type: none;
	padding:0;
	margin:0;
}
.children-list:after {	
	content:'';
	display: block;
	clear:both;
	border-bottom: 1px solid #ededed;
	margin-bottom:10px;
}
.children-list li {
	float: right;
}

.children-list li a {
	display: inline-block;
	padding: 5px 7px ;
	font-family:tahoma;
}

.children-list .genericon {
	vertical-align: middle;
}

5 تعليق

  1. جزاك الله خير
    مقال جيد
    أظن أن هذه الطريقة في عرض التصنيفات مفيدة خصوصا في حالة مواقع الاعلانات المبوبة وغيرها ولعل هنالك بعض الإضافات تستخدمها بطريقة اخرى مثل هذه الإضافة الجميلة
    http://wordpress.org/plugins/another-wordpress-classifieds-plugin/

    شكرا لك مرة اخرى

  2. السلام عليكم أخي

    بارك الله فيك

    عندي استفسار بسيط
    أنا أريد عرض التصنيفات الفرعية داخل صفحة التصنيف الرئيسي، ولكن عندما نفتح تصنيفًا فرعيًا أريد أن تظهر لي محتويات هذا التصنيف.. كيف؟

  3. السلام عليك اخي انا اضافت صفحة جديدة وعملت تصنيف جديد ولكن حينما اقوم بنشر خبر واضعه باسم الصفحة الذي سميت به التصنيف لا يظهر الخبر

  4. بعد ان انشي تصنيف فرعي كيف اضعة في قائمة التصنيف الرئيسي بحيث يظهر في الصفحة الرئيسية عندما اضغط على التصنيف الفرعي
    مثلا : التصنيف ارئيسي الرياضة والتصنيف الفرعي (الرياضة العالمية)
    تحياتي

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *