رفتن به مطلب

ساخت فیلتر مرتب سازی ایجکسی برای پست تایپ خاص


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

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

 

تشکر. کدهارو یه بررسی کردم یجارو جا انداخته بودم برای همین نمایش نمیداد. الان درست شده. ممنونم. همین که از شما میپرسم مشکل خودش حل میشه :D

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

تشکر. کدهارو یه بررسی کردم یجارو جا انداخته بودم برای همین نمایش نمیداد. الان درست شده. ممنونم. همین که از شما میپرسم مشکل خودش حل میشه :D

خواهش میکنم.

موفق باشید

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

 

واقعا ممنونم از آموزشای خوبتون. خیلی چیزای جدید یاد گرفتم. حداقل در مورد ایجکس تاحالا فکر نمیکردم بتونم یاد بگیرم.

این مورد جستجو بر اساس آیدی هم به خوبی انجام شد.

وقتی آیدی پستی رو وارد میکنم نمایشش میده. ولی وقتی آیدی رو از توی اینپوت پاک میکنم اون پیغام رو نمایش میده که چنین پستی وجود نداره.

با چه تغییری میشه کاری کرد که وقتی محتوای اینپوت خالی بشه بیاد همه مطالب رو نمایش بده؟؟

لینک به ارسال

درود مجدد

 

نقل قول

با چه تغییری میشه کاری کرد که وقتی محتوای اینپوت خالی بشه بیاد همه مطالب رو نمایش بده؟؟

محتوای فایل filterid.php رو به شکل زیر تغییر دهید.

<?php

$post_id = $_GET['post_id'];

if(!empty($post_id)) {

	if(!is_numeric($post_id)) {
		echo "آیدی پست باید عددی باشد";
		exit;
	}

	if("publish" != get_post_status($post_id)) {
		echo "پستی با این آیدی وجود ندارد";
		exit;
	}

	$args = array(
		'ignore_sticky_posts' => 1,
		'post_type' => 'book',
		'p' => (int) $post_id
	);

} else {
	
	$args = array(
		'ignore_sticky_posts' => 1,
		'post_type' => 'book',
		'posts_per_page' => 10,
		'post_status' => 'publish'
	);
	
}

$query = new WP_Query($args);

if($query->have_posts()) :
	while($query->have_posts()) :
		$query->the_post(); ?>
	<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>
	<?php
	endwhile;
	wp_reset_postdata();
else :
	echo "پستی با این آیدی وجود ندارد";
endif;

 

موفق باشید

لینک به ارسال
در در 12/3/2017 at 11:56، mehran-b گفته است :

 


<script>
  jQuery(function($) {
    $('input#pid').change(function(){
      $.ajax({
        type : "GET",
        url : "<?php echo home_url('/'); ?>",
        data : {
          do : 'filterID',
          post_id : $(this).val()
        },
        beforeSend : function() {
          $(".loading").fadeIn();
        },
        success : function(response) {
          $('#result').html(response);
          $(".loading").fadeOut();
        }
      });
    });
  });
</script>

 

سلام. وقتتون بخیر.

تو کد بالا میشه آیدی result رو تعریف کرد که وقتی آیدی پست رو تو اینپوت وارد میکنیم بره به اون قسمت از صفحه که آیدیش result هست؟

الان نتایجی تو این div با این آیدی نمایش داده میشه ولی چون بالای این div مواردی دیگه هم هست بعد از ایجکس شدن من باید خودم اسکرول کنم تا پایین صفحه تا نتیجه رو تو #result ببینم.

آیا امکانش هست؟

لینک به ارسال

درود مجدد

 

نقل قول

آیا امکانش هست؟

بله ممکنه.

<script>
  jQuery(function($) {
    $('input#pid').change(function(){
      $.ajax({
        type : "GET",
        url : "<?php echo home_url('/'); ?>",
        data : {
          do : 'filterID',
          post_id : $(this).val()
        },
        beforeSend : function() {
          $(".loading").fadeIn();
        },
        success : function(response) {
          $('#result').html(response);
          $(".loading").fadeOut();
          $('html, body').animate({
            scrollTop: $("#result").offset().top
          }, 2000);
        }
      });
    });
  });
</script>

 

موفق باشید

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

 

سلام.وقت بخیر

ممنونم.

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

توی اون صفحه که فیلتر رو بر اساس term های تاکسونومی old قرار دادیم میخوام یه بخش دیگه درست کنم که یه فیلتر بر اساس term های یک تاکسونومی دیگه با اسم design که بصورت سلکت باکسه و term ها هم بصورت option های داخل سلکت باکس.

از کدهای قبلی کمک گرفتم و تقریبا موفق به نمایشش شدم (با یکسری ایرادات)

یه صفحه جدید ساختم مثل صفحه ideal و تغییرات لازم رو انجام دادم. و همینطور کد صفحه فانکشن هم اضافه کردم تا به این صفحه هدایت بشه.

ولی با چنج شدن سلکت باکس هیچ اتفاقی نمیفته و ایجکس هم نمیشه.

 

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

 

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

<script>
  $(document).ready(function(){
    $('input[name="filter_design"]').change(function(){
      $.ajax({
        type : "GET",
        url : "<?php echo home_url('/'); ?>",
        data : {
          do : 'filterdesign',
          termid : $(this).val()
        },
        beforeSend : function() {
          $("#loading").fadeIn(); // show loading
        },
        success : function(response) {
          $('#result').html(response); // change result
          $("#loading").fadeOut(); // hide loading
        }
      });
    });
  });
</script>

کد فانکشن:

<?php
add_action('template_redirect', function() {
    if(isset($_GET['do']) && $_GET['do'] == "filterdesign") {
		add_filter('template_include', function() {
            return get_template_directory() . '/design-filter.php';
        });
    }
});

کدهای صفحه  design-filter :

<?php

$termid = $_GET['termid'];
$args = array(
	'posts_per_page' => 12,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
	'post_type' => 'book'
);
if(is_numeric($termid)) {
	$args = array_merge($args, array(
			'tax_query' => array(
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => (int) $termid
				)
			)
	));
	} else {
	$terms_id = array_map('intval', array_map('trim', explode(",", $termid)));
	$args = array_merge($args, array(
		'tax_query' => array(
			array(
				'taxonomy' => 'design',
				'field' => 'term_id',
				'terms' => $terms_id
			)
		)
	));
}
$myposts = new WP_Query($args);
while ( $myposts->have_posts() ) {
  $myposts->the_post(); ?>
<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>

<?php }
wp_reset_postdata();

?>

از این کد هم برای نمایش سلکت باکس:

 <?php
$terms = get_terms(array(
	'taxonomy' => 'design',
    'hide_empty' => false
));
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    echo '<div class="design-main">';
 
    foreach ( $terms as $term ) {
		echo ' <label class="control-label" for="inputdesign">paper</label>
      <select class="paper clearfix" id="inputdesign"></select>
	  
	  <label class="control-label glass" for="inputLocation"> glass </label>
	  
	    <select name="filter_design" id="inputLocation for="radio'.$term->term_id.'">
		 <option value="">-</option>'.$terms = get_the_terms($post->ID, 'design').' 
		<option value="'.$term->term_id.'" selected="selected" '.$term->term_id.'" value="'.$term->term_id.'">'.$term->name.'</option></select>';
	  
	  
    }
    echo '</div>';
  
}
?>

 

لینک به ارسال

درود مجدد

 

توی کد JQuery برای سلکت سلکت باکس نباید از input استفاده کنید سلکت باکس تگش select ئه.

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

کد مربوط به فایل design-filter.php هم میتونه پیشرفت کنه.

 

موفق باشید

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

 

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

میتونید راهنمایی کنید این بخش رو بسازم؟

منظورتون اینه نمیشه ا سلکت باکس استفاده کرد؟

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

میتونید راهنمایی کنید این بخش رو بسازم؟

منظورتون اینه نمیشه ا سلکت باکس استفاده کرد؟

توی این خط:

$('input[name="filter_design"]').change(function(){

شما اصلا چی رو سلکت کردید؟

اصلا input ای با این مشخصات توی صفحه هست؟

تازه اگر باشه چه ربطی به سلکت باکس داره؟

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

 


$('input[name="filter_design"]').change(function(){

 

این مورد رو درست کردم. همونطور که گفتید select رو جایگزین inpuut کردم.

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

آپشن هارو باید چطور بسازم؟

لینک به ارسال

درود مجدد

 

نقل قول

آپشن هارو باید چطور بسازم؟

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

کد JQuery:

<script>
  $(document).ready(function(){
    $('select[name="filter_design"]').change(function(){
      $.ajax({
        type : "GET",
        url : "<?php echo home_url('/'); ?>",
        data : {
          do : 'filterdesign',
          termid : $(this).val()
        },
        beforeSend : function() {
          $("#loading").fadeIn(); // show loading
        },
        success : function(response) {
          $('#result').html(response); // change result
          $("#loading").fadeOut(); // hide loading
        }
      });
    });
  });
</script>

کد صفحه design-filter.php:

<?php

$termid = $_GET['termid'];
$args = array(
	'posts_per_page' => 10,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
	'post_type' => 'design'
);
if(is_numeric($termid)) {
	if($termid == 0) {
		$terms_id = wp_list_pluck(get_terms(array('taxonomy' => 'design')), 'term_id');
		$args = array_merge($args, array(
			'tax_query' => array(
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => $terms_id
				)
			)
		));
	} else {
		$args = array_merge($args, array(
			'tax_query' => array(
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => (int) $termid
				)
			)
		));
	}
}
$myposts = new WP_Query($args);
while ( $myposts->have_posts() ) {
  $myposts->the_post(); ?>
	<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>
<?php }
wp_reset_postdata();

کد ساخت سلکت باکس داینامیک:

<div class="design-main">
<select name="filter_design">
	<?php
		$category_options = array(
			'0' => 'همه دسته ها'
		);
		$cats = wp_list_pluck(get_terms(array( 
			'taxonomy' => 'design',
			'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>
</div>

 

موفق باشید

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

 

ممنونم بسیار عالی بود.

ببخشید. چطور میشه این فیلتر وقتی مطالب انتخاب شده مربوط به اون term رو که برای design هست رو میاره سفارشی تر کرد. مثلا وقتی یکی از این آپشن های سلکت باکس انتخاب میشه بررسی کنه مطالبی رو نمایش بده که تیک term  های تکسونومی new هم براشون فعال شده باشه. در غیر این صورت اگه فعال نباشه مطلبی رو نمایش نده.

لینک به ارسال

درود مجدد

 

نقل قول

ببخشید. چطور میشه این فیلتر وقتی مطالب انتخاب شده مربوط به اون term رو که برای design هست رو میاره سفارشی تر کرد. مثلا وقتی یکی از این آپشن های سلکت باکس انتخاب میشه بررسی کنه مطالبی رو نمایش بده که تیک term  های تکسونومی new هم براشون فعال شده باشه. در غیر این صورت اگه فعال نباشه مطلبی رو نمایش نده.

<?php

$termid = $_GET['termid'];
$args = array(
	'posts_per_page' => 10,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
	'post_type' => 'design'
);
if(is_numeric($termid)) {
	$news_id = wp_list_pluck(get_terms(array('taxonomy' => 'new')), 'term_id');
	if($termid == 0) {
		$terms_id = wp_list_pluck(get_terms(array('taxonomy' => 'design')), 'term_id');
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => $terms_id
				),
				array(
					'taxonomy' => 'new',
					'field' => 'term_id',
					'terms' => $news_id
				)
			)
		));
	} else {
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => (int) $termid
				),
				array(
					'taxonomy' => 'new',
					'field' => 'term_id',
					'terms' => $news_id
				)
			)
		));
	}
}
$myposts = new WP_Query($args);
while ( $myposts->have_posts() ) {
  $myposts->the_post(); ?>
	<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>
<?php }
wp_reset_postdata();

 

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

 

تشکر.

با عرض پوزش.

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

امکانش وجود داره؟

لینک به ارسال
<?php

$termid = $_GET['termid'];
$args = array(
	'posts_per_page' => 10,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
	'post_type' => 'design'
);
if(is_numeric($termid)) {
	if($termid == 0) {
		$terms_id = wp_list_pluck(get_terms(array('taxonomy' => 'design')), 'term_id');
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => $terms_id
				),
				array(
					'taxonomy' => 'new',
					'field' => 'name',
					'terms' => 'sale'
				)
			)
		));
	} else {
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => (int) $termid
				),
				array(
					'taxonomy' => 'new',
					'field' => 'name',
					'terms' => 'sale'
				)
			)
		));
	}
}
$myposts = new WP_Query($args);
while ( $myposts->have_posts() ) {
  $myposts->the_post(); ?>
	<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>
<?php }
wp_reset_postdata();

 

لینک به ارسال

مشکلم حل شد.

تشکر از شما بخاطر آموزشهای خوبتون.واقعا ممنونم

ویرایش شده توسط maraljoon
لینک به ارسال
در 58 دقیقه قبل، mehran-b گفته است :

 

خواستم به کد بالا یه کد اضافه کنم که اگه پستی وجود نداشت پیغامی نمایش بده. از کدهایی که دادین چنین چیزی درست کردم ولی جواب نداد.

<?php
if(!empty($term_id)) {
if("publish" != get_post_status($term_id)) {
	echo "پستی وجود ندارد";
		exit;
}

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

تشکر

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

خواستم به کد بالا یه کد اضافه کنم که اگه پستی وجود نداشت پیغامی نمایش بده. از کدهایی که دادین چنین چیزی درست کردم ولی جواب نداد.

<?php

$termid = $_GET['termid'];
$args = array(
	'posts_per_page' => 10,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
	'post_type' => 'design'
);
if(is_numeric($termid)) {
	if($termid == 0) {
		$terms_id = wp_list_pluck(get_terms(array('taxonomy' => 'design')), 'term_id');
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => $terms_id
				),
				array(
					'taxonomy' => 'new',
					'field' => 'name',
					'terms' => 'sale'
				)
			)
		));
	} else {
		$args = array_merge($args, array(
			'tax_query' => array(
				'relation' => 'AND',
				array(
					'taxonomy' => 'design',
					'field' => 'term_id',
					'terms' => (int) $termid
				),
				array(
					'taxonomy' => 'new',
					'field' => 'name',
					'terms' => 'sale'
				)
			)
		));
	}
}
$myposts = new WP_Query($args);
if(!$myposts->have_posts()) {
	echo "پستی وجود ندارد";
	exit;
}
while ( $myposts->have_posts() ) {
  $myposts->the_post(); ?>
	<div class="col-md-3 col-sm-3 col-xs-3 clearfix">
		<div class="box">
			<div class="image clearfix">
				<?php the_post_thumbnail(''); ?>
			</div>
			<h2 class="posttitle"><?php the_title(); ?></h2>
		</div>
	</div>
<?php }
wp_reset_postdata();

 

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

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

سلام مجدد.

در این مورد میتونید راهنماییم کنید؟

همین فیلترهایی که درست کردیم به همین شکل بجای تکسونومی ها بر اساس یک meta_key خاص باشه

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

حلقه وردپرس بر اساس یک meta_key خاص رو توی پاسخ های قبلیم در تاپیک های دیگر گفتم.

درسته. تو این تاپیک

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

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

لینک به ارسال

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

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

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

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

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

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

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

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

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