رفتن به مطلب

مشکل درست نیامدن تاریخ فروش ویژه ووکامرس در حلقه و اسلایدر


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

سلام دوستان,من در سایتم یک اسلایدر  طراحی کردم که داخل  اسلایدر میخوام محصولامو با زمان بندی خاص حراج کنم  ولی نمیدونم چرا داخل queryکه زدم فقط زمان بندی فروش یکی از محصولامو نمایش میده,هر چی تلاش میکنم  زمان بندی محصولای دیگمو نشون بده این کارو نمیکنه,در واقع مشکل اصلی من اینه که زمانبندی فروش داخل حلقه نمیره  در بیرون اسلایدر هم حلقه زدم ولی در داخل حلقه هم فقط در یکی از محصولات زمان بندی فروش می اید.

mos2.zip

لینک به ارسال
در در ۱۳۹۹/۱۱/۲۲ در 23:59، mostafa7887 گفته است :

سلام دوستان,من در سایتم یک اسلایدر  طراحی کردم که داخل  اسلایدر میخوام محصولامو با زمان بندی خاص حراج کنم  ولی نمیدونم چرا داخل queryکه زدم فقط زمان بندی فروش یکی از محصولامو نمایش میده,هر چی تلاش میکنم  زمان بندی محصولای دیگمو نشون بده این کارو نمیکنه,در واقع مشکل اصلی من اینه که زمانبندی فروش داخل حلقه نمیره  در بیرون اسلایدر هم حلقه زدم ولی در داخل حلقه هم فقط در یکی از محصولات زمان بندی فروش می اید.

mos2.zip 3.75 kB · 0 دریافت

سلام. کاملا ایرادش مشخصه. شما یه کوئری زدید ولی بعدش برای دریافت تاریخ پایان فروش ویژه، آیدی گلوبال محصول رو گرفتید. کدتون باید این مدلی اصلاح بشه:

<div class="slideshow-container">

  <?php
    	$args = array( 
        	'post_type' 	 => 'product',
          	'post_status'	 => 'publish',
          	'posts_per_page' => 3,
        );
  
    	$loop = new WP_Query( $args );
 
    	while ( $loop->have_posts() ) {
          	$loop->the_post(); ?>

  				<div class="mySlides fade">
    				<div class="numbertext">1 / 3</div>
    				<!-- <img src="<?php //echo get_template_directory_uri();?>/image/3590887.jpg" > -->
     				<?php if( has_post_thumbnail() ) {
      					the_post_thumbnail( 'thumbnail' );
      			} ?>
 
    			<div class="text">  <?php the_title();?></div>

    			<?php
  					//function sales_timer_countdown_product() {  

      				//global $product; ************** ایراد از این خط و خط بعدی هست *****************

      				//$sale_date = get_post_meta( $product->get_id(), '_sale_price_dates_to', true );
      				$sale_date = get_post_meta( get_the_ID(), '_sale_price_dates_to', true ); // باید آیدی محصول رو از کوئری بگیرید نه از خط بالا
  					//var_dump($sale_date);
      				if ( ! empty( $sale_date ) ) { ?>

         				 <script>
              				// Set the date we're counting down to
                            var countDownDate = <?php echo $sale_date; ?> * 1000;

                            // Update the count down every 1 second
                            var x = setInterval(function() {
                                // Get today's date and time
                                var now = new Date().getTime();

                                // Find the distance between now and the count down date
                                var distance = countDownDate - now;     

                                // Time calculations for days, hours, minutes and seconds
                                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                                var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                                var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                                var seconds = Math.floor((distance % (1000 * 60)) / 1000);

                                // Output the result in an element with id="saleend"
                                document.getElementById("saleend").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";

                  				// If the count down is over, write some text 
                                if (distance < 0) {
                                    clearInterval(x);
                                    document.getElementById("saleend").innerHTML = "The sale for this product has EXPIRED";
                                }
              				}, 1000);
          				</script>

          				<!-- this is where the countdown is displayed -->
          				<p id="saleend" style="color:red"></p>

          			<?php
                  }
              ?>

  			</div>
  			<?php
  		}
 
      	wp_reset_postdata(); ?>

</div>

 

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

سلام. کاملا ایرادش مشخصه. شما یه کوئری زدید ولی بعدش برای دریافت تاریخ پایان فروش ویژه، آیدی گلوبال محصول رو گرفتید. کدتون باید این مدلی اصلاح بشه:


<div class="slideshow-container">

  <?php
    	$args = array( 
        	'post_type' 	 => 'product',
          	'post_status'	 => 'publish',
          	'posts_per_page' => 3,
        );
  
    	$loop = new WP_Query( $args );
 
    	while ( $loop->have_posts() ) {
          	$loop->the_post(); ?>

  				<div class="mySlides fade">
    				<div class="numbertext">1 / 3</div>
    				<!-- <img src="<?php //echo get_template_directory_uri();?>/image/3590887.jpg" > -->
     				<?php if( has_post_thumbnail() ) {
      					the_post_thumbnail( 'thumbnail' );
      			} ?>
 
    			<div class="text">  <?php the_title();?></div>

    			<?php
  					//function sales_timer_countdown_product() {  

      				//global $product; ************** ایراد از این خط و خط بعدی هست *****************

      				//$sale_date = get_post_meta( $product->get_id(), '_sale_price_dates_to', true );
      				$sale_date = get_post_meta( get_the_ID(), '_sale_price_dates_to', true ); // باید آیدی محصول رو از کوئری بگیرید نه از خط بالا
  					//var_dump($sale_date);
      				if ( ! empty( $sale_date ) ) { ?>

         				 <script>
              				// Set the date we're counting down to
                            var countDownDate = <?php echo $sale_date; ?> * 1000;

                            // Update the count down every 1 second
                            var x = setInterval(function() {
                                // Get today's date and time
                                var now = new Date().getTime();

                                // Find the distance between now and the count down date
                                var distance = countDownDate - now;     

                                // Time calculations for days, hours, minutes and seconds
                                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                                var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                                var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                                var seconds = Math.floor((distance % (1000 * 60)) / 1000);

                                // Output the result in an element with id="saleend"
                                document.getElementById("saleend").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";

                  				// If the count down is over, write some text 
                                if (distance < 0) {
                                    clearInterval(x);
                                    document.getElementById("saleend").innerHTML = "The sale for this product has EXPIRED";
                                }
              				}, 1000);
          				</script>

          				<!-- this is where the countdown is displayed -->
          				<p id="saleend" style="color:red"></p>

          			<?php
                  }
              ?>

  			</div>
  			<?php
  		}
 
      	wp_reset_postdata(); ?>

</div>

 

لینک به ارسال

ممنون اقای یزدانی از پاسخی که به سوال من دادید,اما من کد تغییر داده شما را هم جایگذاری کردم اما همون مشکل رو داشتم و یک چیزه دیگه این که من $sale_dateروکه شما تغییردادیدvar_dumpکردم وسه تا متای جدا به من داد پس معلوم تا $sale_dateدرست کار میکنه به نظر من مشکل توی جاوا اسکریپت است که داخل حلقه نمیره نظر شما در این باره چیه من اطلاعاتم در این باره خیلی کم هستش اگر مقدور است بازم کمکم که باید چه کار کنم ممنون از شما.

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

ممنون اقای یزدانی از پاسخی که به سوال من دادید,اما من کد تغییر داده شما را هم جایگذاری کردم اما همون مشکل رو داشتم و یک چیزه دیگه این که من $sale_dateروکه شما تغییردادیدvar_dumpکردم وسه تا متای جدا به من داد پس معلوم تا $sale_dateدرست کار میکنه به نظر من مشکل توی جاوا اسکریپت است که داخل حلقه نمیره نظر شما در این باره چیه من اطلاعاتم در این باره خیلی کم هستش اگر مقدور است بازم کمکم که باید چه کار کنم ممنون از شما.

خواهش میکنم. ببینید، عملا الان کد درست عمل میکنه سمت php و دقیقا مشکل از سمت js هست. تاریخ فروش ویژه بصورت strtotime ذخیره میشه نه برحسب ثانیه که شما اون رو در 1000 ضرب کردید. کلا کد بخش js از پایه غلطه. شما باید تاریخ رو تبدیل کنید، بعد زمان باقیمونده رو داخل جاوااسکریپت محاسبه کنید. بنظرم خیلی ساده تر هست که برای نمایش تایمر از لایبرری هایی مثل TimezZ استفاده کنید. اما قبلش باید تاریخ رو تبدیل کنید و بعد این لایبرری رو اضافه و یه خط کد مربوطه رو اضافه کنید:

<?php
		while ( $loop->have_posts() ) {
          	$loop->the_post(); ?>

  				<div class="mySlides fade">
    				<div class="numbertext">1 / 3</div>
     				<?php if( has_post_thumbnail() ) {
      					the_post_thumbnail( 'thumbnail' );
					} ?>
 
    			<div class="text">  <?php the_title();?></div>

    			<?php
					$current_product = wc_get_product( get_the_ID() );

					if( ! $current_product->is_in_stock() || $current_product->is_on_sale() ) {
						continue;
					}

      				$onsale_start = get_post_meta( get_the_ID(), '_sale_price_dates_from', true );
      				$onsale_end   = get_post_meta( get_the_ID(), '_sale_price_dates_to', true );
					$start_date	  = date( 'Y-m-d', $onsale_start );
					$end_date	  = date( 'Y-m-d', $onsale_end );
					$today 		  = date('Y-m-d');

					if( $today >= $start_date && $today < $end_date ) {
						echo '<div class="countdown-timer countdown-timer' . get_the_ID() . '"></div>';
						echo '<script>var date_end = new Date(' . $end_date . '* 1000);new TimezZ(".countdown-timer' . get_the_ID() . '",{date:date_end,template:"<span>NUMBER</span> "});'
					} else {
						echo '<span>تمام شد!</span>';
					}
		}
    ?>

تست نکردم ولی باید جواب بده. ضمنا باید اون کتابخانه TimezZ رو  حتما به صفحه اضافه کنید.

لینک به ارسال

تشکر دوباره از شما اقای یزدانی واقعا ممنونم که جواب منو دادید,ولی اقای یزدانی من کتابخونه  TimezZ که گفته بودید enqueu کردم اما باز جواب نگرفتم متاسفانه اطلاعات jqueryوjavascriptمن هم بسیار پایین است  اگر باز برای شما زحمتی نیست کمکم کنید واقعامن شرمنده شما هستم.

لینک به ارسال

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

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

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

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

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

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

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

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

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