• اطلاعیه ها

    • Morteza

      باهم بسازیم: اطلس ووکامرس و وردپرس   14/07/96

      تاپیک ایجاد شده برای بحث در جهت ایجاد یک منبع، ویکی، صفحات توضیحی و یا بخش آموزشی جامع برای وردپرس و متعلقات مختلف آن است. لطفا جهت مشارکت در این بحث، ارائه پیشنهاد و یا انتقاد به تاپیک فوق مراجعه کنید. باهم بسازیم: اطلس ووکامرس و وردپرس
mehrdadj

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

19 پست در این موضوع قرار دارد

باسلام

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

 

<?php

$wp= new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => wp_get_post_categories( $post->ID ), 
'order' => 'DESC',
'orderby' => 'id',
'posts_per_page' =>'1',
'showposts' => '1',
)); 
?>


<li>مطلب</li>

<?php endwhile;endif ;wp_reset_query();?>

من از Id دسته خودمو با :

'category__in' => wp_get_post_categories( $post->ID ), 

می گیرم. و مطالب نشون داده میشن، حالا می خوام دسته مادر لینک کنم، یعنی به عبارتی یه دکمه باشه "مشاهده آرشیو" وقتی کاربر کلیک کرد بره دسته اصلی همون مطلب.

الان من با :

<?php echo get_category_link(); ?>

لینک میدم ولی لینک میشه به خود مطلب که همون ادامه مطلب من هست.

ممنون میشم کمکم کنید این کد تکمیل کنم.

0

به اشتراک گذاری این پست


لینک به پست

سلام

 

<?php

$wp= new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => wp_get_post_categories( $post->ID ), 
'order' => 'DESC',
'orderby' => 'id',
'posts_per_page' =>'1',
'showposts' => '1',
)); 
?>


<li>مطلب</li>

<?php endwhile;endif ;wp_reset_query();?>

از کد بالا برای ساخت حلقه category.php استفاده میکنید؟

1

به اشتراک گذاری این پست


لینک به پست

سلام

ممنون از پاسخ شما

 

من ادامه مطلب یا همون single.php که هست می خوام وقتی کاربری  وارد ادامه مطلب دسته ای شد آخرین مطالب همون دسته بالا نشون داده بشه یعنی قبل حلقه پست،

<?php

$wp= new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => wp_get_post_categories( $post->ID ), 
'order' => 'DESC',
'orderby' => 'id',
'posts_per_page' =>'5',
'showposts' => '5',
)); 
?>


<li>مطلب</li>

<?php endwhile;endif ;wp_reset_query();?>

<a href="<?php echo get_category_link(); ?>">مشاهده همه</a>

من از این کد استفاده می کنم برای نمایش توی single.php نشون هم میده یعنی بالا اخرین مطالب دسته همون مطلب نشون میده پائین هم که خود مطلب هست بدون مشکل، فقط مشکل اینجاست نمی تونم توی حلقه اول به دسته مادر لینک بدم یعنی کاربر 5 تا اخرین مطلب دسته ای که توی ادامه مطلبش هست می بینه یه دکمه باشه که بره به category.php همون دسته که اخرین هاشو نشون میده.

الان مشکل فقط لینک به این کد هست:

<a href="<?php echo get_category_link(); ?>">مشاهده همه</a>

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

0

به اشتراک گذاری این پست


لینک به پست

شما اون حلقه ای که واسه آخرین مطالب دسته زدید توی single.php رو توی حلقه اصلی single.php گذاشتید یا نه خارج از حلقه single.php هست؟

0

به اشتراک گذاری این پست


لینک به پست

توی یک فایل هستن ولی خارج حلقه ادامه مطلب هست، در واقع من الان دوتا حلقه دارم.

0

به اشتراک گذاری این پست


لینک به پست
در 10 دقیقه قبل، mehrdadj گفته است :

توی یک فایل هستن ولی خارج حلقه ادامه مطلب هست، در واقع من الان دوتا حلقه دارم.

خوب پس اگر خارج از حلقه اصلی single.php هست متغییر سراسری $post اصلا اینجا تعریف نشده که شما به عنوان خوارک دادید به تابع wp_get_post_categories.

حلقه مورد نظر به این شکل باید باشه:

<?php
$wp = new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => wp_get_post_categories(get_queried_object_id()),
'posts_per_page' => 5
));
if($wp->have_posts()) :
while($wp->have_posts()) :
$wp->the_post();
?>


<li>مطلب</li>

<?php
endwhile;
wp_reset_postdata();
endif;
?>

خوب حالا میرسیم به این کد

<a href="<?php echo get_category_link(); ?>">مشاهده همه</a>

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

ویرایش شده در توسط mehran-b
1

به اشتراک گذاری این پست


لینک به پست

بی نهایت ممنون دوست عزیز من.

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

0

به اشتراک گذاری این پست


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

بی نهایت ممنون دوست عزیز من.

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

خوب برای پیدا کردن دسته مادر این کد رو به فایل functions.php قالبتون زیر اولین

<?php

اضافه میکنید.

function mehran_parent_category_link($post_id) {
	$cats = get_the_category($post_id);

	foreach($cats as $cat) {
		if($cat->parent === 0)
			$parent_ids[] = $cat->term_id;
	}

	$parent = max($parent_ids);

	return esc_url(get_category_link($parent));
}

سپس اونجایی که میخواید لینک دسته مادر رو بگیرید اگر توی حلقه اصلی single.php بود از این کد

<a href="<?php echo mehran_parent_category_link($post->ID); ?>">مشاهده همه</a>

و اگر هم خارج از حلقه اصلی single.php بود از این کد

<a href="<?php echo mehran_parent_category_link(get_queried_object_id()); ?>">مشاهده همه</a>

دریافت میکنید.

 

موفق باشید

1

به اشتراک گذاری این پست


لینک به پست

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

 

1

به اشتراک گذاری این پست


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

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

خواهش میکنم.

پاینده باشید

1

به اشتراک گذاری این پست


لینک به پست

سلام

 

آقا مهران عزیز من یه مشکل دیگه ای هم دارم

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

 

در واقع می خوام این کد به صورت حلقه در بیاد و دسته مادر هر چند تا دسته داشت به صورت کدی که شما دادین عمل کنه و لوپ بشه:

 

 

<?php
$wp = new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'category__in' => wp_get_post_categories(get_queried_object_id()),
'posts_per_page' => 5
));
if($wp->have_posts()) :
while($wp->have_posts()) :
$wp->the_post();
?>


<li>مطلب</li>

<?php
endwhile;
wp_reset_postdata();
endif;
?>

 

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

 

 

0

به اشتراک گذاری این پست


لینک به پست

بله چرا که نشه حتما میشه.

برای اینکار در اصل باید لوپ تو لوپ کنید.

<?php
$childs = get_term_children(get_queried_object_id(), 'category');
foreach($childs as $child) :
	$wp = new WP_Query(array(
		'post_type' => 'post',
		'post_status' => 'publish',
		'category__in' => $child->term_id,
		'posts_per_page' => 5
	));
	if($wp->have_posts()) :
		while($wp->have_posts()) :
			$wp->the_post();
?>


<li>مطلب</li>

<?php
		endwhile;
		wp_reset_postdata();
	endif;
endforeach;
?>

کد بالا رو تست کنید ببینید جواب میگیرید یا خیر.

1

به اشتراک گذاری این پست


لینک به پست

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

اقای مهران عزیز من برای هر دسته مادر یه قالب درست کردم یعنی ای دی هارو به صورت دستی میزنم، ولی دسته مادر با کدی که دیشب بهم دادین میره به آرشیو مطالب کامل ولی زیر دسته لینک نمیشه.

 

دسته مادر من id 2 داره و یه category-2.php ساختم، الان دوتا کوئری دارم اولی دسته مادر هست دومی زیر دسته مادر که id 1262 داره حالا دسته اول بدون مشکل لینک میشه به ارشیو کامل نوشته ها ولی زیر دسته لینک نمیشه!

 

<?php
$wp = new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'cat' => 2 ,
'posts_per_page' => 5
));
if($wp->have_posts()) :
while($wp->have_posts()) :
$wp->the_post();
?>


<li>مطلب</li>

<?php
endwhile;
wp_reset_postdata();
endif;
?>

<a href="<?php echo mehran_parent_category_link($post->ID); ?>">مشاهده همه</a>


<?php
$wp = new WP_Query(array(
'post_type' => 'post',
'post_status' => 'publish',
'cat' => 1262 ,
'posts_per_page' => 5
));
if($wp->have_posts()) :
while($wp->have_posts()) :
$wp->the_post();
?>


<li>مطلب</li>

<?php
endwhile;
wp_reset_postdata();
endif;
?>

<a href="<?php echo mehran_parent_category_link($post->ID); ?>">مشاهده همه</a>

و یک سئوال من چجوری می تونم این کوئری رو یک بار بنویسم و برای چندین باکس در یک صفحه استفاده کنم؟

چون توی یک دسته مادر کم کم 10 تا زیر دسته هست باید برای همه زیر دسته ها همین کد تکرار کنم و فقط ایدی رو عوض کنم.

0

به اشتراک گذاری این پست


لینک به پست
نقل قول

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

حالا باید فکر بشه روی کده تا ببینیم مشکلش چیه.

 

در مورد اون کوئری ها شما قرار بود کوئری ها رو توی single.php استفاده کنی الان داری توی category.php استفاده میکنی؟

 

نقل قول

و یک سئوال من چجوری می تونم این کوئری رو یک بار بنویسم و برای چندین باکس در یک صفحه استفاده کنم؟

کوئری رو بذار توی یه تابع به آرگومان تابع هم آیدی دسته رو ارسال کن.

function mehran_cat_query($cat_id) {
	$wp = new WP_Query(array(
		'post_type' => 'post',
		'post_status' => 'publish',
		'cat' => $cat_id,
		'posts_per_page' => 5
	));
	if($wp->have_posts()) :
		while($wp->have_posts()) :
			$wp->the_post();
?>

<li>مطلب</li>

<?php
		endwhile;
		wp_reset_postdata();
	endif;
}

کد بالا رو میذاری توی functions.php بعد هر جا خواستی حلقه رو نمایش بدی آیدی دسته رو میفرستی به حلقه و حلقه برات نمایش داده میشه:

<?php mehran_cat_query(2); ?>

مثلا توی مثال بالا مطالب دسته ای که آیدی 2 هست رو نشون میده.

ویرایش شده در توسط mehran-b
1

به اشتراک گذاری این پست


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

در مورد اون کوئری ها شما قرار بود کوئری ها رو توی single.php استفاده کنی الان داری توی category.php استفاده میکنی؟

اره اولی جواب داد دومی نداد.

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

کوئری رو بذار توی یه تابع به آرگومان تابع هم آیدی دسته رو ارسال کن.

عالیه!!!!! دستت درد نکنه

0

به اشتراک گذاری این پست


لینک به پست
نقل قول

اره اولی جواب داد دومی نداد.

دومی توی category.php اینطوری میشه:

<a href="<?php echo esc_url(get_category_link(get_queried_object_id())); ?>">مشاهده همه</a>

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

2

به اشتراک گذاری این پست


لینک به پست

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

 

https://www.tasvirezendegi.com/news/

 

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

0

به اشتراک گذاری این پست


لینک به پست

سلام

 

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

<?php
$cat_obj = get_queried_object();
if($cat_obj->category_parent === 0) {
	$childs_id = get_term_children($cat_obj->cat_ID, 'category');
	if($childs_id !== array()) {
		foreach($childs_id as $child_id) {
			$wp = new WP_Query(array(
				'post_type' => 'post',
				'post_status' => 'publish',
				'category__in' => $child_id,
				'posts_per_page' => 5
			));
			if($wp->have_posts()) :
				while($wp->have_posts()) :
					$wp->the_post();
?>


<li>مطلب</li>

<?php
				endwhile;
				wp_reset_postdata();
			endif;
		}
	}
}
?>

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

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری