رفتن به مطلب

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


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

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

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

من یک پست تایپ و براش تکسونومی ساختم. حالا میخوام یک فیلتر جستجو بسازم که دسته ها یا همون 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
لینک به ارسال

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

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

 

لینک به ارسال
  • 1 سال بعد...

اتصال دو select box به یکدیگر، در جاوااسکریپت:

<!DOCTYPE html>
<html>
<body>

<h1>Two HTML-select boxes linked to each other</h1>

<p>see:</p>

<select id="sel1" onchange="giveSelection(this.value)">
  <option value="cars">cars</option>
  <option value="fruit">fruit</option>
</select>
<select id="sel2">
  <option data-option="cars">BMW</option>
  <option data-option="cars">Pride</option>
  <option data-option="cars">Benz</option>
  
  <option data-option="fruit">Banana</option>
  <option data-option="fruit">Apple</option>
  <option data-option="fruit">Orange</option>
</select>

<script>
  var sel1 = document.querySelector('#sel1');
  var sel2 = document.querySelector('#sel2');
  var options2 = sel2.querySelectorAll('option');

  function giveSelection(selValue) {
    sel2.innerHTML = '';
    for(var i = 0; i < options2.length; i++) {
      if(options2[i].dataset.option === selValue) {
        sel2.appendChild(options2[i]);
      }
    }
  }

  giveSelection(sel1.value);
</script>
</body>
</html>

 

لینک به ارسال
در در ۱۴۰۰/۱۱/۱۴ در 22:47، milad-day گفته است :

اتصال دو select box به یکدیگر، در جاوااسکریپت:

 

سلام.ممنون

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

لینک به ارسال

زنده باشید

چیزی که من براتون قرار دادم، بخشی از راه حل این مسئله هستش که به کدنویسی js مربوط میشه.

مسئله شما سه بخش داره: 1) ایجاد داده های اولیه مورد نیاز بوسیله پرسمان سفارشی 2) ایجاد رابط کاربری تعاملی (کدهایی که من نوشتم) 3) ارسال درخواست AJAX و پیاده سازی نمایش داده های برگشتی

لینک به ارسال
در در ۱۴۰۰/۱۱/۲۱ در 13:38، maral_hamidi گفته است :

سلام.ممنون

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

به نظرم کارتون خیلی آسون تر از این حرفاست. ولی تو این تاپیک پیچیده شده.

ی بار دیگه منظورتون رو توضیح بدین و کدهایی هم که تا حالا نوشتین و قرار بدین تا راحت تر بتونیم راهنمایی کنیم.

موفق و پیروز باشید.

لینک به ارسال
  • 4 ماه بعد...

ببینین شما اول باید لیست دسته های والد اصلی رو نشون بودین همنطور که دوستان گفتن با مقدار parent=>0 خب حالا با انتخاب هر ایتم باید با ajax یه درخواست بفرستین به admin-ajax.php که این دسته بندی با ایدی X انتخاب شد حالا شما تو کد ajax تون باید لیست زیر دسته اون دسته X رو میفرستین و تو سلکت باکش دوم نمایش میدین

لینک به ارسال

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

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

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

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

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

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

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

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

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