رفتن به مطلب

نحوه نمایش تمام پست های یک تاکسونومی خاص


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

با سلام

یک کوئری به شکل زیر دارم که پست هایی که دارای یک دسته مشابه از تاکسونومی با عنوان series هست رو دارن بصورت لیست در صفحه single نمایش میده ولی یه مشکل داره اگر پستی منتشر بشه و جز هیچ دسته ای از تاکسونومی series نباشه ارور میده و به خط 4 رم کدها جایی که foreach ایجاد شده اشاره میکنه !!!

حالا چه تغییری در کدها ی زیر باید بدم اگر مطلب یا همون پست منتشر شده جز هیچ دسته ای از تاکسونومی series نبود این کوئری اجرا نشه و اگر جزه دسته ای بود اجرا بشه

ممنون

کار این کوئری هم در کل برای مطالبی هست که بصورت دوره و سریالی در سایت منتشر میشه و برای دسترسی راحت تر کاربرا به سایر قسمت های دوره منتشر شده هستش

ممنون میشم راهنمایی کنید...


<?php
foreach((get_the_terms($post->ID, 'series')) as $term) { echo '<p> </p>'; }
?>
<?php

$args = array(
'post_type' => 'post',
'order' => 'DESC',
'orderby' => 'date',
'tax_query' => array(
array(
'taxonomy' =>'course',
'field' => 'term_id',
'terms' =>$term
)
)
);
$r_query = new WP_Query($args);
if ($r_query->have_posts()) {
echo '<div class="course-container">
<div id="flip"><span>لیست سایر قسمت های این مطلب که تاکنون منتشر شده است...</span><div class="arrow-down"></div></div>
<div id="panel"><div id="course_posts_list" style="margin:0px !important" class="alert alert-info">';

while ($r_query->have_posts()) {
$r_query->the_post();
echo '<li><span class="list-icon">   </span><a target="_blank" title="'. get_the_title().'" href="'. get_permalink().'">' . get_the_title() . '
</a> <span class="date-tab hidden-xs"> (تاریخ انتشار :'.the_date('d F Y','','',false).')</span></li>';
}echo '</div></div></div>';}
wp_reset_postdata();
?>

لینک به ارسال

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


<?php
$terms = get_the_terms($post->ID, 'series');
if($terms) :
foreach($terms as $term) {
//...
}
?>
<?php

$args = array(
'post_type' => 'post',
'order' => 'DESC',
'orderby' => 'date',
'tax_query' => array(
array(
'taxonomy' =>'course',
'field' => 'term_id',
'terms' =>$term
)
)
);
$r_query = new WP_Query($args);
if ($r_query->have_posts()) {
echo '<div class="course-container">
<div id="flip"><span>لیست سایر قسمت های این مطلب که تاکنون منتشر شده است...</span><div class="arrow-down"></div></div>
<div id="panel"><div id="course_posts_list" style="margin:0px !important" class="alert alert-info">';

while ($r_query->have_posts()) {
$r_query->the_post();
echo '<li><span class="list-icon">   </span><a target="_blank" title="'. get_the_title().'" href="'. get_permalink().'">' . get_the_title() . '
</a> <span class="date-tab hidden-xs"> (تاریخ انتشار :'.the_date('d F Y','','',false).')</span></li>';
}echo '</div></div></div>';}
wp_reset_postdata();
endif;
?>

لینک به ارسال

ممنون استاد ممنون از راهنماییتون کوئری بهینه تری سراغ دارید ؟؟؟

بطور کلی سه تا تاکسونومی با نامه های series,course و vip دارم می خوام مطالبی که دارای دسته مشابه در یکی از این تاکسونومی ها بود بصورت لیست در قسمت جدیدی که از مطلب مشابه منتشر میشه نمایش داده یشه یه چیزی مثل مطالب مرتبط با این تفاوت که فیلتر رو بزاره روی دسته های یک یا چند تاکسونومی و اون هایی که دسته مشابه دارن زیر هم لیست بشن

ممنون میشم راهنمایی بفرمایید...

لینک به ارسال

این کد شما فقط آخریم term را در نظر می گیره و برای خوندش تمام ترمهای اون تاکسونامی رو در مطلب جاری باید بخونه چون شما term را از بعد از اتمام حلقه foreach گرفتید

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

لینک به ارسال

درسته و حتما چندین ترم خواهد داشت بسته به هر سری آموزشی که ایجاد میشه یک ترم هم اضافه خواهد شد حالا به نظر شما چطور کد رو اصلاح کنم؟؟؟

لینک به ارسال

شما دقیقا چی کار می خواهید انجام بدید؟

ارتباط تاکسونامی series با course چیه؟

چرا از یک تاکسونامی استفاده نشده؟

لینک به ارسال

من سه تا تاکسونومی با نام های series,course و vip دارم که در کاستوم پست تایپ post هستند که هر کدوم شما یکسری دسته هست بهصورت زیر:

series

آموزش برنامه نویسی php

آموزش طراحی وب

...

vip

آموزش برنامه نویسی اندرویید

آموزش فتوشاپ

...

course

آموزش css,html

آموزش سئو

...

که بسته به دوره های جدید این دسته ها بیشتر می شن حالا فرض میکنیم یه دوره آموزشی برنامه نویسی php که شامل 20 قسمت هست قراره در سایت منتشر بشه حالا زمانی که می خواهیم هر قسمت رو در سایت منتشر کنیم دسته آموزش برنامه نویسی php برای این دوره درنظر میگیریم حالا من می خوام در صفحه single هر قسمت از این دوره لیست سایر قسمت های این دوره که در سایت منتشر شده برای راحتی کاربر در دسترسی به سایر قسمت هاش نمایش داده بشه و کوئری بیاد چک کنه اگر برای هر مطلب از این دوره اگر این دسته آموزش برنامه نویسی php در نظر گرفت شد در لیست سایر قسمت های این دوره که گفتم نمایش داده بشه برای سایر تاکسونومی ها به همین صورت و این سه تاکسونومی رو ایجاد کردم که مطالب برای هر مورد نظم داشته باشه

این چیزی هست که مد نظر من هست نمیدونم شاید راه بهتر دیگه ای هم داشته باشه اما من نسبت به اطلاعاتم این حالت کوئری زدن به نظرم رسید

در کل میخوام که سایر قسمت های یه دوره آموزشی که جز یکی از دسته های تاکسونومی هایی که در بالا اشاره کردم بود در در صفحات single هر قسمت اون دوره نمایش داده بشه یه چیزی مثل تصویر زیر :

post-4063-0-03663100-1416337317_thumb.pn

با سپاس و تشکر از شما استاد گرامی...

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

من باز هم متوجه نشدم شما در کدتون ترم تاکسونامی series را گرفتید و برای تاکسونامی course کوئری نوشتید

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


$series = get_the_term_list($post->ID, 'series');
if(!empty($series))
$series = strip_tags($series);
if ( $series && ! is_wp_error( $series) ) {
$series_query = new WP_Query( array(
'showposts'=> '-1',
'post__not_in' => array( $post->ID),
'series' => $series,
'caller_get_posts'=>1,
'post_type' => array('post'),
) );
if ($series_query->have_posts()) {
echo '<ul class="list-group">';
while ($series_query->have_posts()) : $series_query->the_post(); ?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul>';
}
wp_reset_query();
}

لینک به ارسال

شرمنده استاد اشتباه تایپی من بود بجای course باید همون series رو قرار میدادم در کدهای بالا

بسیار عالی همین کوئری که شما دادید بسیار خوبه و کار میکنه فقط بعنوان سوال آخر حالا اگر بخواهیم در همین کوئری که شما دادید 2 تاکسونومی دیگه یعنی course و vip رو هم بگونجونیم به چه صورته؟یعنی توسط همین یه کوئری 3 تا تاکسونومی موجود رو بررسی کنیم و مطالب هم دستشون رو نشون بدیم ؟؟؟ چون میشه سه با این کوئری رو برای 3 تاکسونومی بصورت مجزا ولی ادغامش کنیم و برای هر سه تاکسونومی از یه کوئری استفاده کنیم بهتره... ممنون میشم این مورد رو هم توضیح بدید...

لینک به ارسال

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


$series = get_the_term_list($post->ID, 'series');
$course = get_the_term_list($post->ID, 'course');
$vip = get_the_term_list($post->ID, 'vip');
if(!empty($series))
$series = strip_tags($series);
if(!empty($course))
$course = strip_tags($course);
if(!empty($vip))
$vip = strip_tags($vip);
if ( $series && ! is_wp_error( $series) && $course && ! is_wp_error( $course) && $vip && ! is_wp_error( $vip) ) {
$series_query = new WP_Query( array(
'showposts'=> '-1',
'post__not_in' => array( $post->ID),
'series' => $series,
'course' => $course,
'vip' => $vip,
'caller_get_posts'=>1,
'post_type' => array('post'),
) );
if ($series_query->have_posts()) {
echo '<ul class="list-group">';
while ($series_query->have_posts()) : $series_query->the_post(); ?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul>';
}

لینک به ارسال

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

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

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

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

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

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

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

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

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