رفتن به مطلب

حلقه نمایش عنوان دسته های مادر و زیر دسته ها و محتوای هر زیر دسته


پست های پیشنهاد شده

سلام اساتید و دوستان محترم..

دنبال یه حلقه و یه روش میگردم که بتونم این مورد رو انجام بدم. تا یه جاهایی پیش رفتم ولی کامل نیست.

من 4 تا دسته دارم و هر کدوم از این دسته ها 1 الی 2 زیر دسته. و هر زیر دسته ممکنه چندتا پست داشته باشن.

روش نمایش به این شکله که ابتدا عنوان دسته مادر میاد و زیرش عنوان زیر دسته ها. و جلوی هر زیر دسته تایتل پست های مختص اون زیردسته.

در واقع با استفاده از این حلقه همه دسته ها و زیر دسته های موجود نمایش داده میشن.

و این حلقه مربوط به یک پست تایپ خاص به اسم BOX هست.

ممنون میشم تو ساختن این حلقه کمکم کنید.

تشکر

لینک به ارسال

سلام و درود

 

به شکل لیست ul و li تونستم تقریبا چیزی رو که مدنظره بدست بیارم.

 

ابتدا دو تا تابع زیر رو میذارید توی فایل functions.php

function mehran_get_cat_post_ids($taxonomy, $post_type, $posts_per_page, $term_id) {
	
	$query = new WP_Query(array(
		'post_type' => $post_type,
		'posts_per_page' => $posts_per_page,
		'fields' => 'ids',
		'tax_query' => array(
			array(
				'taxonomy' => $taxonomy,
				'terms' => $term_id
			)
		)
	));
	
	return $query->posts;
	
}

function mehran_get_parent_child_post($taxonomy = 'category', $post_type = 'post', $posts_per_page = 10) {
	
	$cats = get_categories(array(
		'taxonomy' => $taxonomy
	));

	$data = array();

	foreach($cats as $k => $v) {
		
		if($v->parent)
			$data[$v->parent][$v->term_id] = mehran_get_cat_post_ids($taxonomy, $post_type, $posts_per_page, $v->term_id);
		else
			$data[$v->term_id] = false;
		
	}
	
	return $data;
	
}

بعد مثلا جایی که میخواید باید اینجوری ازش استفاده کنید.

احتیاج به 3 به صورت تو در تو هست.

$data = mehran_get_parent_child_post();

echo "<ul dir='rtl'>";
foreach($data as $k => $v) {
	
	echo "<li>";
	echo get_cat_name($k);
	if(is_array($v)) {
		echo "<ul>";
			foreach($v as $cid => $pid) {
				
				echo "<li>";
				echo get_cat_name($cid);
				if(is_array($pid)) {
					echo "<ul>";
					foreach($pid as $p) {
						echo "<li>";
						echo get_the_title($p);
						echo "</li>";
					}
					echo "</ul>";
				}
				echo "</li>";
				
			}
		echo "</ul>";
	}
	echo "</li>";
	
}
echo "</ul>";

تابع mehran_get_parent_child_post سه تا ارگومان داره که هیچ کدومش اجباری نیست اولی تاکسونومی مورد نظر که به صورت پیشفرض category هست دومی پست ایپ مورد نظر که به صورت پیشفرض post هست سومی هم تعداد پست هایی که میخواد برای هر زیر دسته بزنه که به صورت پیشفرض 10 عدد هست.

 

موفق باشید

لینک به ارسال
در 1 ساعت قبل، mehran-b گفته است :

 

ممنونم عالی بود. دقیقا همون نتیجه ای که میخواستم رو تو خروجی داشت.

سپاسگزارم از اینکه وقت گذاشتید.

لینک به ارسال
در 3 دقیقه قبل، maraljoon گفته است :

ممنونم عالی بود. دقیقا همون نتیجه ای که میخواستم رو تو خروجی داشت.

خواهش میکنم

در 3 دقیقه قبل، maraljoon گفته است :

سپاسگزارم از اینکه وقت گذاشتید.

موفق باشید

لینک به ارسال
در 10 ساعت قبل، mehran-b گفته است :

function mehran_get_parent_child_post($taxonomy = 'category', $post_type = 'post'

سلام. ببخشید. برای اینکه پست تایپ خاص رو بهش بدیم فقط باید همین خط باید ویرایش بشه؟ بخش post type?

لینک به ارسال
در 4 دقیقه قبل، maraljoon گفته است :

سلام. ببخشید. برای اینکه پست تایپ خاص رو بهش بدیم فقط باید همین خط باید ویرایش بشه؟ بخش post type?

نه این خود تابع است اینو ویرایش نکن وقتی فراخوانیش کردی بهش یه مقدار جدید بده.

$data = mehran_get_parent_child_post('category', 'test', 5);

 

لینک به ارسال
در 11 دقیقه قبل، mehran-b گفته است :

نه این خود تابع است اینو ویرایش نکن وقتی فراخوانیش کردی بهش یه مقدار جدید بده.


$data = mehran_get_parent_child_post('category', 'test', 5);

 

عذر میخوام متوجه نشدم.B)

مقدار جدید رو به چی بدم؟

مثلا پست تایپم portfolio هست. توی قالب باید فراخونی بشه؟ به چه شکل؟ کد فانکشن رو تغییر ندم؟

لینک به ارسال
در 9 دقیقه قبل، maraljoon گفته است :

مقدار جدید رو به چی بدم؟

به تابعی مقدار میدن که فراخوانیش میکنند نه وقتی که میسازنش.

$data = mehran_get_parent_child_post('category', 'portfolio'); // اینجا فراخوانیش کردیم توی فایل فانکشنز قالب تعریفش کردیم

echo "<ul dir='rtl'>";
foreach($data as $k => $v) {
	
	echo "<li>";
	echo get_cat_name($k);
	if(is_array($v)) {
		echo "<ul>";
			foreach($v as $cid => $pid) {
				
				echo "<li>";
				echo get_cat_name($cid);
				if(is_array($pid)) {
					echo "<ul>";
					foreach($pid as $p) {
						echo "<li>";
						echo get_the_title($p);
						echo "</li>";
					}
					echo "</ul>";
				}
				echo "</li>";
				
			}
		echo "</ul>";
	}
	echo "</li>";
	
}
echo "</ul>";

 

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...