رفتن به مطلب

ساخت جستجوگر وردپرس با تفکیک دسته و زیر دسته


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

سلام به دوستان.

میتونید راهنماییم کنید که یک فیلتر جستجو بسازم؟

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

میخوام دوتا سلکت باکس بگیرم که اولی دسته های مادر و دومی زیر دسته هارو نمایش بده. احتمالا باید ایجکس بشه تا وقتی دسته مادر انتخاب میشه در سلکت باکس دوم زیر دسته های مربوط به دسته انتخاب شده نمایش داده شن.

منتظر همراهیتون هستم.:wub:

لینک به ارسال
ارسال شده در (ویرایش شده)
در 1 ساعت قبل، maraljoon گفته است :

سلام به دوستان.

میتونید راهنماییم کنید که یک فیلتر جستجو بسازم؟

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

میخوام دوتا سلکت باکس بگیرم که اولی دسته های مادر و دومی زیر دسته هارو نمایش بده. احتمالا باید ایجکس بشه تا وقتی دسته مادر انتخاب میشه در سلکت باکس دوم زیر دسته های مربوط به دسته انتخاب شده نمایش داده شن.

منتظر همراهیتون هستم.:wub:

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

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

کد مربوط به نمایش اون ترم ها با استفاده از رادیو باکس:

 

<?php
$terms = get_terms( 'type_job', array(
    'hide_empty' => false,
));
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    echo '<ul>';
    echo '<li><label for="radionull"><input type="radio" name="radiofilter" id="radionull" value="null">هیچکدام</label></li>';
    foreach ( $terms as $term ) {
      echo '<li><label for="radio'.$term->term_id.'"><input type="radio" name="radiofilter" id="radio'.$term->term_id.'" value="'.$term->term_id.'">'.$term->name.'</label></li>';
    }
    echo '</ul>';
}
?>

 

ویرایش شده توسط maraljoon
لینک به ارسال
در در ۱۳۹۹/۱۰/۲۸ در 14:31، maraljoon گفته است :

با این روش تونستم همه دسته هارو یکجا نمایش بد. ولی هنوز نمیدونم چطوری بدیلش کنم به دو سلکت باکس و دسته های مادر و زیر دسته هارو از هم جدا کنم.

<select name="filter_design">
	<?php
		$category_options = array(
			'0' => 'همه دسته ها'
		);
		$cats = wp_list_pluck(get_terms(array( 
			'taxonomy' => 'type_job',
			'hide_empty' => false
		)), 'name', 'term_id');
		$category_options = $category_options + $cats;
		?>
		<option selected disabled hidden>انتخاب دسته بندی</option>
		<?php
		foreach($category_options as $value => $label) {
			echo '<option '.selected($_GET['filter_design'], $value).' value="' . esc_attr($value) . '">' . esc_html($label) . '</option>';
		}
	?>   

 

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

با این روش تونستم همه دسته هارو یکجا نمایش بد. ولی هنوز نمیدونم چطوری بدیلش کنم به دو سلکت باکس و دسته های مادر و زیر دسته هارو از هم جدا کنم.


<select name="filter_design">
	<?php
		$category_options = array(
			'0' => 'همه دسته ها'
		);
		$cats = wp_list_pluck(get_terms(array( 
			'taxonomy' => 'type_job',
			'hide_empty' => false
		)), 'name', 'term_id');
		$category_options = $category_options + $cats;
		?>
		<option selected disabled hidden>انتخاب دسته بندی</option>
		<?php
		foreach($category_options as $value => $label) {
			echo '<option '.selected($_GET['filter_design'], $value).' value="' . esc_attr($value) . '">' . esc_html($label) . '</option>';
		}
	?>   

 

سلام. باید برای باکس اول چک کنید که والد داره یا نه:

<select name="filter_design">
	<?php
		$args = array(
			'orderby' 	=> 'name',
			'order' 	=> 'ASC',
			'parent' 	=> 0,
		);

		$cats = get_categories( $args );
		?>

		<option value="0">انتخاب دسته بندی</option>
		<?php
		foreach( $cats as $cat ) {
			sprintf( '<option value="%s">%s</option>', $cat->term_id, $cat->name );
		}
	?>
</select>

حالا دو حالت دارید برای نمایش فرزندها:

1- کل زیر دسته ها فارغ از اینکه چند سطح باشن رو لیست کنید:

<?php
$args = array(
	'child_of' => 5 // آیدی دسته والد
);

$cats = get_categories( $args );
?>
<option value="0">انتخاب دسته بندی</option>
<?php
foreach( $cats as $cat ) {
	sprintf( '<option value="%s">%s</option>', $cat->term_id, $cat->name );
}
?>

 

2- فقط زیر دسته های سطح اول رو بگیرید:

<?php
$args = array(
	'parent' => 5 // آیدی دسته والد
);

$cats = get_categories( $args );
?>

	<option value="0">انتخاب دسته بندی</option>
	<?php
	foreach( $cats as $cat ) {
		sprintf( '<option value="%s">%s</option>', $cat->term_id, $cat->name );
	}
?>

دیگه بخش ایجکس رو خودتون زحمتش رو بکشید :)

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

لینک به ارسال
در 14 ساعت قبل، yazdaniwp گفته است :

...

دیگه بخش ایجکس رو خودتون زحمتش رو بکشید :)

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

سلام.ممنون از راهنماییتون:wub:

متسافانه خیلی متوجه نشدم چیکار کنم. تو حالت اول فقط اومدم parent  => 0 که گفتید  رو به کد خودم اضافه کردم که دسته های والد رو لیست میکنه. تا اینجا مشکلی نیست.

تو حالت دوم برای ایجاد یک سلکت باکس دیگه که بتونم زیر دسته هارو لیست کنم و از ایجکس استفاده کنم مشکل دارم. و نمیدونم چطور اینکارو کنم

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

سلام.ممنون از راهنماییتون:wub:

متسافانه خیلی متوجه نشدم چیکار کنم. تو حالت اول فقط اومدم parent  => 0 که گفتید  رو به کد خودم اضافه کردم که دسته های والد رو لیست میکنه. تا اینجا مشکلی نیست.

تو حالت دوم برای ایجاد یک سلکت باکس دیگه که بتونم زیر دسته هارو لیست کنم و از ایجکس استفاده کنم مشکل دارم. و نمیدونم چطور اینکارو کنم

سلام. خواهش میکنم. برای گام اول که کلا نیازی به کد خودتون نیست. کل کد رو براتون نوشتم. برای بخش دومش هم باید با jquery روی رویداد change مربوط به select اولی، مقدار انتخابی رو بگیرید و بفرستید. بعد کد دوم یا سوم رو بذارید بدون sprintf و با یه متغیر که اطلاعات رو هر دفعه بهش اضافه کنید و در آخر خروجی رو بفرستید برای صفحه.

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

سلام. خواهش میکنم. برای گام اول که کلا نیازی به کد خودتون نیست. کل کد رو براتون نوشتم. برای بخش دومش هم باید با jquery روی رویداد change مربوط به select اولی، مقدار انتخابی رو بگیرید و بفرستید. بعد کد دوم یا سوم رو بذارید بدون sprintf و با یه متغیر که اطلاعات رو هر دفعه بهش اضافه کنید و در آخر خروجی رو بفرستید برای صفحه.

خیلی متوجه کارکرد کدی که لطف کردید نشدم.

نوع تاکسونومی رو هم بهش اضافه کردم ولی اصلا دسته هارو نمایش نمیده.

ویرایش شده توسط maraljoon
لینک به ارسال

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

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

 

لینک به ارسال

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

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

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

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

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

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

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

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

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