رفتن به مطلب

مشکل reset نشدن کوئری


alam7o

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

سلام خدمت دوستان عزیز ،

بنده قصد شماره گذاری پست های یک دسته رو داشتم و با استفاده از کد زیر اونو انجام دادم

function Get_Post_Number($postID){
	$temp_query = $wp_query;
	$args = array ( 
	'orderby' => 'date', 
	'order'=> 'DESC', 
	'post_type' => 'post', 
	'posts_per_page' => '-1' );
	$counter = 1;
	$postCount = 0;
	$AVRank = null;
	$AVRank = new WP_Query($args);
	if($AVRank->have_posts()) {
	    while ($AVRank->have_posts()) : $AVRank->the_post();
	        if ($postID == get_the_ID()){
	            $postCount = $counter;
	        } else {
	            $counter++;
	        }
	endwhile; }
	wp_reset_query();
	$wp_query = $temp_query;
	return $postCount;
}

حالا مشکل اینجاس که من باید اینو داخل یه حلقه فراخونی کنم حالا چه تو single.php چه قسمتای دیگه در سایت و وقتی کدش رو قرار میدم شماره گذاری رو درست انجام میده ولی بعد کد بر میگرده به پست اصلی یا حلقه اول یه مثال میزنم که منظورمو بهتر برسونم

حلقه اول : عنوان Title 1

حلقه دوم که شامل 20 تا پست هست داخل حلقه اول

حالا این کد داخل حلقه دوم گذاشته میشه ولی بعد از کد برای مثال wp_title() میشه همون عنوان حلقه اول یعنی title 1 و برای همه ی پست ها هم تکرار میشه wp_reset_query هم گذاشتم واقعا دیگه نمیدونم مشکل از کجاس

 

از اساتید عزیز ممنون میشم راهنمایی کنید.

لینک به ارسال

سلام

یعنی میخواید پست ها شماره گذاری بشن، ولی وقتی یک گروه شماره خوردن، برای گروه بعدی از 1 شروع نشه درسته؟

لینک به ارسال
در در 5/12/2020 at 09:32، Morteza گفته است :

سلام

یعنی میخواید پست ها شماره گذاری بشن، ولی وقتی یک گروه شماره خوردن، برای گروه بعدی از 1 شروع نشه درسته؟

سلام ، تشکر که وقت گذاشتین، بله دقیقا البته میخوام تو single.php هم نمایش داده بشه

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

function AvRankingNumbers(){
	$AVRankargs = array (  
	'order'=> 'DESC', 
	'meta_key' => 'totalreviews', 
	'orderby'=> 'meta_value_num', 
	'post_type' => 'post', 
	'posts_per_page' => '-1' );
	$AVRank = get_posts( $AVRankargs );
	$counter = 1;
	$counts = 0;
	$postnumbercount = $AVRank->post_count;
	
	if($AVRank) :
	    foreach ($AVRank as $post) : 
		setup_postdata($post);
	        $counts++;
			add_post_meta($post->ID, 'av_ranking', $counts, true);
			update_post_meta($post->ID, 'av_ranking', $counts);
		endforeach;
	endif;
}
add_action ( 'publish_post', 'AvRankingNumbers' );
add_action ( 'deleted_post', 'AvRankingNumbers' );
add_action ( 'edit_post', 'AvRankingNumbers' );

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

 

درواقع منظورم این هست که دارم از روش درستی استفاده می کنم ؟!

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

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

میتونید یک متغییر بیرون حلقه تعریف و اون رو دال حلقه یکی یکی اضافه کنین.

 

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

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

میتونید یک متغییر بیرون حلقه تعریف و اون رو دال حلقه یکی یکی اضافه کنین.

 

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

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

یک سوالی

چرا کوئری رو مستقیم توی حلقه پست نمیزارین؟

تابع نیازی نیست.

کد حلقه پستتون رو اینجا بزارید.

لینک به ارسال
//این حلقه اول هست که پست توش فراخوانی میشه
while ( have_posts() ) : the_post();
	// the_title ...
	// the_content
	// ...
		//اینجا حلقه دومم اجرا میشه
		if( have_rows('comp_post') ): while( have_rows('comp_post') ): the_row(); 
			$postinacf = get_sub_field('comppost', false, false);
		endwhile;endif;
		$args = array('post__in'=> ((!isset($postinacf) || empty($postinacf)) ? array(-1) : $postinacf),
		'posts_per_page' => -1,'order'=> 'DESC', 'meta_key' => 'totalreviews','orderby'=> 'meta_value_num');
		 
		 $AVPcomp_args = new WP_Query($args);
		 if ($AVPcomp_args->have_posts()) { 
			while($AVPcomp_args->have_posts()) : $AVPcomp_args->the_post();  
			//
			//
			// کدی که تو فانکشن گذاشتم قراره اینجا فراخوانی بشه
			//
			//
			endwhile; 
		  } 
		wp_reset_query(); // پایان حلقه دوم

endwhile; // پایان حلقه اول
نقل قول

چرا کوئری رو مستقیم توی حلقه پست نمیزارین؟

امتحان کردم اعداد رو درست نشون نمیداد همه پست های داخل لیست (حلقه دوم) شمارشون 1 میشد

add_action ( 'publish_post', 'AvRankingNumbers' );
add_action ( 'deleted_post', 'AvRankingNumbers' );
add_action ( 'edit_post', 'AvRankingNumbers' );

از طریق این روشی هم که کار میکنه نمیدونم کاره درستیه یا نه امیدوار بودم شما بهترین روش رو بهم بگید

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

 

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

الان اینجا یه مشکلی هست

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

وقتی که تعداد پست ها زیاد بشه دردسر میشه

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

الان اینجا یه مشکلی هست

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

وقتی که تعداد پست ها زیاد بشه دردسر میشه

خب شما راه حلی به ذهنتون میرسه که این اتفاق نیوفته ؟ البته بالاتر توضیح دادید که تابع نیازی نیست ولی واقعا چیزی از پی اچ پی سر در نمیارم

لینک به ارسال
  • 1 ماه بعد...
در در ۱۳۹۹/۲/۲۳ در 09:32، Morteza گفته است :

یعنی میخواید پست ها شماره گذاری بشن، ولی وقتی یک گروه شماره خوردن، برای گروه بعدی از 1 شروع نشه درسته؟

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

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

$i=0;
while ( have_posts() ) : the_post(); $i++;
echo $i;

وقتی به صفحه بعد میرم شماره ها دوباره از 1 شروع میشه

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

سلام. ببینید، آیا شما بجز برای نمایش این شمارنده به کاربر جای دیگه ای هم نیاز دارید این کار انجام بشه؟

مورد بعدی:

در در ۱۳۹۹/۲/۲۴ در 20:29، alam7o گفته است :

add_post_meta($post->ID, 'av_ranking', $counts, true); update_post_meta($post->ID, 'av_ranking', $counts);

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

حقیقتا علت اینکه چرا چنین کاری میکنید رو متوجه نشدم ولی بهر حال اگه درست درک کرده باشم که چه کاری میخواید انجام بدید، کد صفحه archive.php چیزی شبیه به این خواهد بود:

$current_page 	= ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 0;
$counter 		= 1;

<?php if ( have_posts() ):
	while ( have_posts() ):
		the_post();
		update_post_meta( get_the_ID(), 'totalreview', $current_page + $counter, true );
		echo $current_page + $counter;
		// Your code
		$counter++;
	endwhile;
endif;
?>

اینجوری وقتی هر صفحه ای از لیست همین post type که آرشیوش این باشه، هم مقادیر بروز میشن و هم میتونید نمایشش بدید.

لینک به ارسال

 

در 10 دقیقه قبل، yazdaniwp گفته است :

سلام. ببینید،

ممنونم که وقت گذاشتید

ببینید من قبلا میخواستم هر پست دارای متا کی totalreview رتبه بندی بشه نه داخل آرشیو یعنی یه متا کی براش درست بشه و رتبش از 1 باشه تا هر چند تا پست که totalreview رو دارن این از مورد اول که اخر هم به نتیجه مطلوبی نرسیدم و منصرف شدم

مثلا پست اول که امتیازش 100 هست بشه 1 و پست پست ها طبق امتیازشون شماره بگیرن 

این از مورد اول

مورد دوم هم 

صفحه archive.php مثال دسته نرم افزار این دسته 100 تا پست داره و تو هر صفحه 10 تا رو نمایش میده با این کد زیر

$i=0;
while ( have_posts() ) : the_post(); $i++;
echo $i;

پستها شماره گذاری میشن و درست کار میکنه ولی وقتی به صفحه 2 میریم به جای اینکه شماره از 11 شروع بشه دوباره از 1 شروع میشه نمیدونم منظورمو متوجه میشید یا نه

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

پستها شماره گذاری میشن و درست کار میکنه ولی وقتی به صفحه 2 میریم به جای اینکه شماره از 11 شروع بشه دوباره از 1 شروع میشه نمیدونم منظورمو متوجه میشید یا نه

خواهش میکنم. کدی که بهتون دادم یه متغیر داره برای اینکه بدونید کدوم صفحه هستید و البته یه ایرادی داره، باید اینجوری تغییرش بدید:

$current_page 	= ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) - 1 : 0;
$i 				= 1;
while ( have_posts() ) : the_post(); 
	echo $current_page * 10 + $i; // عدد 10 برابر با تعداد آیتمهایی هست که در هر صفحه نمایش میدید
	$i++;
endwhile

 

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

خواهش میکنم. کدی که بهتون دادم یه متغیر داره برای اینکه بدونید کدوم صفحه هستید و البته یه ایرادی داره، باید اینجوری تغییرش بدید:


$current_page 	= ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) - 1 : 0;
$i 				= 1;
while ( have_posts() ) : the_post(); 
	echo $current_page * 10 + $i; // عدد 10 برابر با تعداد آیتمهایی هست که در هر صفحه نمایش میدید
	$i++;
endwhile

 

خیلی ممنون عالی بود مورد دوم با این کدی که دادید حل شد برای مورد اول راهی سراغ ندارید ؟

در 52 دقیقه قبل، alam7o گفته است :

ببینید من قبلا میخواستم هر پست دارای متا کی totalreview رتبه بندی بشه نه داخل آرشیو یعنی یه متا کی براش درست بشه و رتبش از 1 باشه تا هر چند تا پست که totalreview رو دارن این از مورد اول که اخر هم به نتیجه مطلوبی نرسیدم و منصرف شدم

مثلا پست اول که امتیازش 100 هست بشه 1 و پست پست ها طبق امتیازشون شماره بگیرن

 

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

مثلا پست اول که امتیازش 100 هست بشه 1 و پست پست ها طبق امتیازشون شماره بگیرن

خواهش میکنم. این امتیاز باید ثبت بشه یا صرفا برای نمایش به کاربر میخواید؟

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

خواهش میکنم. این امتیاز باید ثبت بشه یا صرفا برای نمایش به کاربر میخواید؟

ثبت بشه بهتره ولی خب نیاز هست که هروقت مقدار totalreview تغییر کرد این مورد هم  تغییر کنه

لینک به ارسال

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

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

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

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

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

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

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

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

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