رفتن به مطلب

مشکل در دسته ها و زیر دسته ها


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

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

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

query_posts(array('category__and'=>array(37595,$category_id)));

استفاده کردم ولی چون دسته 37595 دسته بالاتر یک دسته دیگر است این کد جواب نمیدهد. به نظرم بایستی دو راه حل داشته باشد.

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

دوم اینکه در کد بالا کاری کنم که به جای کد دسته بالا ، مجموع کدهای دسته های پایین تر رو با هم در نظر بگیره.

نمی دونم چیکار کنم. بدجور گیر کردم.

لطفا در صورت امکان راهنمایی بفرمائید.

مثال :

دسته اول : جاذبه های گردشگری

زیر دسته : جاذبه های طبیعی

زیر دسته بعدی : آبشارها (این دسته رو در مطالب مربوط به آبشارها فقط انتخاب کردم - دسته های بالاتر رو تیک نزدم.)

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

مثال : آبشار تست1 که در هنگام انتخاب دسته تیک آبشارها و تیک شهر تهران خورده .

می خوام مطالب مشترک دسته آبشارها و دسته شهر تهران رو در یک صفحه نمایش بدم.

لینک به ارسال

وقتی که شما از پروپرتی "category__and" استفاده می کنید، در واقع از وردپرس میخواید که تنها پست هایی رو به شما نشون بده که شامل همۀ دسته هایی که شما در این پروپرتی قرار دادید باشه، برای نمونه پستی که هم به دستۀ "آبشار" و هم به دستۀ "شهرها" مرتبط باشه و نه پستی که یا به دستۀ "آبشار" یا به دستۀ "شهرها" مرتبط شده. :)

با این توضیح اگه شما 10 دسته مختلف داشته باشید و بخواید از پروپرتی "category__and" استفاده کنید، معنیش این میشه : دستۀ "آبشار" و "شهرها" و "دشت" و "گردشگری" و ...

اما شاید ما بخوایم که پستی رو به ما نمایش بده که یکی از دسته های پست جاری رو در خودش داشته باشه، یا به عبارتی پست مرتبط با پست جاری باشه، برای این منظور باید از پروپرتی "category__in" استفاده کنیم که معنیش میشه : دستۀ "آبشار" یا "شهرها" یا "دشت" یا "گردشگری" یا ...

مطالب بیشتر در مورد پارامترهای مربوط به دستۀ کلاس WP_Query رو می تونید در اینجا ببینید. موفق باشید. :)

لینک به ارسال

سلام و ممنو از راهنمایی تون.

فکر میکنم نتونستم مطلب رو درست برسونم.

1- دسته اول : جاذبه های گردشگری

2- زیر دسته : جاذبه های طبیعی

3- زیر دسته بعدی : آبشارها (این دسته رو در مطالب مربوط به آبشارها فقط انتخاب کردم - دسته های بالاتر رو تیک نزدم.)

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

مثال : آبشار تست1 که در هنگام انتخاب دسته تیک آبشارها و تیک شهر تهران خورده .

من در انتشار مطالب تیک 3 و 4 رو زدم. یعنی دسته پدر 3 رو که میشه 1 نزدم. برای همین وقتی از category__in هم استفاده می کنم کار نمیکنه چون می خواد مطالب بند 1 یا 4 رو بیاره که درست نیست.

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

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

لینک به ارسال

سلام

من طبق توضیحاتتون دسته بندی ساختم

با خاصیت category__in براحتی پست های لازم رو از دو بخشی که شما توضیح دادید خروجی داد

لینک به ارسال

سلام و ممنو از راهنمایی تون.

فکر میکنم نتونستم مطلب رو درست برسونم.

1- دسته اول : جاذبه های گردشگری

2- زیر دسته : جاذبه های طبیعی

3- زیر دسته بعدی : آبشارها (این دسته رو در مطالب مربوط به آبشارها فقط انتخاب کردم - دسته های بالاتر رو تیک نزدم.)

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

مثال : آبشار تست1 که در هنگام انتخاب دسته تیک آبشارها و تیک شهر تهران خورده .

من در انتشار مطالب تیک 3 و 4 رو زدم. یعنی دسته پدر 3 رو که میشه 1 نزدم. برای همین وقتی از category__in هم استفاده می کنم کار نمیکنه چون می خواد مطالب بند 1 یا 4 رو بیاره که درست نیست.

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

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

اگه شما تصمیم دارید پست هایی رو که مربوط به دسته "جاذبه های گردشگری" هستش رو بیارید، اما قصد ندارید که پست هایی که مربوط به زیردسته های اون ( در اینجا "آبشارها" و "شهرها" ) هستش رو خروجی بگیرید، می تونید از پروپرتی category__in استفاده کنید، در غیر اینصورت ( زمانی که نیاز دارید یک پست با دسته و زیردستهاش بررسی بشه ) می تونید از پروپرتی cat استفاده کنید.

روش کار می تونه به این شکل باشه :


<?php
$args = array(
"category__in" => array( 3, 4, 9, 10, 13 ),
"category__not_in" => array( 2 ) // not curent post category id
);
query_posts( $args );
if( have_posts() ): while( have_posts() ): the_post();
the_title();
endwhile; endif; wp_reset_query();
?>

در نمونه بالا فقط پستهایی نمایش داده میشن که آیدی های دستۀ مرتبط اونها، در پروپرتی category__in مقداردهی شده باشه، توجه داشته باشید که زیر دسته های این آیدی ها ( 3, 4, 9, 10, 13 ) توسط کوئری ما سنجیده نمیشن.

روش سنجیده شدن هم به این شکل هستش : پستهایی که آیدی مربوط به دسته آنها 3 یا 4 یا 9 یا 10 یا 13 باشد.

لینک به ارسال

با تشکر از دو پاسخ دوست عزیز.

ولی من فکر می کنم مشکل من اینه که من می خوام مطالب مشترک (یعنی اینکه مطالبی که هم دسته شهرها تیک خورده و هم دسته جاذبه های گردشگری) دو دسته ای رو نمایش بدم که یکیش دسته سطح اول بوده و تیک خورده ولی دسته دوم سطح دومش تیک خورده.

مثال زیر رو ببینین:

دسته شهرها دسته اصلیه و زیر دسته هم نداره.

دسته جاذبه های گردشگری دسته اصلیه و زیر دسته جاذبه های طبیعی داره و جاذبه های طبیعی زیر دسته آبشارها داره.

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

چون این دو دسته (آبشارها(زیردسته سطح دو) و شهرها(دسته سطح صفر)) در یک سطح نیستند کد category__and جواب نمی ده و کد category__in هم جواب نمیده. چون معنی "یا" رو میده و بعضی مطالب رو نشون نمیده.

امیدوارم بتونین کمکم کنین.

لینک به ارسال

لطفا اگه امکان داره کدها و لینک مربوط به این کوئری رو اینجا قرار بدید تا بیشتر بررسی کنیم. :)

لینک به ارسال

لطفا لینک روبرو رو نگاه کنید : http://seeiran.ir/ca...sharghi/tabriz/

در این صفحه جدول هتل های تبریز این کد رو داره :

 <table style="width:100%;border: 1px solid #ddd;">
<tr style="background:#ddd;text-align:center;font-family:b yekan;padding:0 5px 0 5px;font-size:14px;"><td style="border: 1px solid #ddd;padding:4px;">نام و لینک هتل</td></tr>
<?php

query_posts(array('category__and'=>array(9303,$category_id)));
while (have_posts()) : the_post();
?>
<tr style="font-family:b yekan;padding:0 5px 0 5px;font-size:14px;border: 1px solid #ddd;"><td style="border: 1px solid #ddd;padding:4px;">
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</td>
</tr>
<?php endwhile;
wp_reset_query();
?>
</table>

در این جدول چون آیدی دسته شهرها همون $category_id هست و آیدی دسته هتلها 9303 هست درست نمایش میده.

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

کد جدول جاذبه های گردشگری :


<div style="margin-bottom:5px;float:right;border: 1px solid #ddd;padding:4px;width:100%;"><div style="background:#115E05;color:#FFF;padding:0 5px 0 5px;font-family:b yekan;font-size:17px;margin-bottom:10px;">
<a style="color:#ffffff;" target="_blank" href="jazebeha+<?php echo $curent_cat->slug; ?>" title="جاذبه های گردشگری <?php echo $curent_cat->name; ?>">
جاذبه های گردشگری <?php echo $curent_cat->name; ?></a>
</div>
<a target="_blank" href="jazebeha+<?php echo $curent_cat->slug; ?>" title="جاذبه های گردشگری <?php echo $curent_cat->name; ?>">
برای دیدن لیست کلیک کنید</a>
<?php


query_posts(array('category__and'=>array(3674,$category_id)));
while (have_posts()) : the_post();
?>
<ul>

<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</ul>
<?php endwhile;
wp_reset_query();
?>
</div>

ببخشین من اینقدر زحمت میدم.

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

category_id مشخص نشده از کجا گرفته میشه ولی با توضیحات شما تست زدم مجدد نتیجه بازهم درست بود!

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

post-1-0-91308600-1424538617_thumb.png

post-1-0-10907300-1424538620_thumb.png

post-1-0-80243400-1424538620_thumb.png

لینک به ارسال

با استفاده از تابع var_dump از متغیر category_id خروجی بگیرید و مطمئن بشید که مقدارش 0 نباشه.


<?php
var_dump( $category_id );
<?php

لینک به ارسال

category_id مشخص نشده از کجا گرفته میشه ولی با توضیحات شما تست زدم مجدد نتیجه بازهم درست بود!

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

وقتی در صفحه دسته مثلا تبریز هستیم category_id آیدی دسته تبریز رو میگیره. عکس ها دقیقا درسته. ولی من تست می کنم جواب نمی ده.

لینک به ارسال

با استفاده از WP_Query یه بار دیگری امتحان کنید و از پروپرتی request هم خروجی بگیرید و خودتون خروجی رو بررسی کنید، اینجا منتشر نکنید چون حاوی اطلاعاتی از پایگاه داده شما هستش.

.

.


<?php
$new_query = new WP_Query( array( "category__and" => array( $category_id, 3 ) ) );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): the_post();
the_title();
echo "<br />";
var_dump( $new_query->request );
endwhile; endif; $new_query->rewind_posts();
?>

لینک به ارسال

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

لینک به ارسال

category_id مشخص نشده از کجا گرفته میشه ولی با توضیحات شما تست زدم مجدد نتیجه بازهم درست بود!

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

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

استان ها و شهرها

استان آذربایجان شرقی

تبریز

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

لینک به ارسال

خروجی

var_dump( $new_query->request );

رو از اینجا واسه من ارسال کنید تا بررسی کنم، ممکن مشکل از WP_Query باشه.

لینک به ارسال

من کوئری شمارو بررسی کردم، مشکلی نداره، کدی که من در بالا برای کلاس WP_Query ایجاد کردم ناقص هستش، کد بالارو با این کد تعویض کنید :


<?php
$new_query = new WP_Query( array( "category__and" => array( 288, 287 ) ) );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): $new_query->the_post();

the_title();
echo "<br />";
endwhile; endif; $new_query->rewind_posts();
?>

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

لینک به ارسال

من کوئری شمارو بررسی کردم، مشکلی نداره، کدی که من در بالا برای کلاس WP_Query ایجاد کردم ناقص هستش، کد بالارو با این کد تعویض کنید :


<?php
$new_query = new WP_Query( array( "category__and" => array( 288, 287 ) ) );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): $new_query->the_post();

the_title();
echo "<br />";
endwhile; endif; $new_query->rewind_posts();
?>

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

باتشکر از شما. جناب آقای خسرجردی از ابتدا مشکل بنده نیز همین بوده است. بحث بین دو آیدی دو دسته نیست. بحث اینه که در اون صفحه ای که مربوط به شهر است و شهر یک دسته child است ، آیدی دسته معلوم است. ولی دسته ای که با اون می خواهد جمع بشود یک دسته parent است و دسته های child آن انتخاب شده اند.

در کل منظورم اینه که :

"category__and" => array( آیدی دسته صفحه که یک child است , آیدی یک دسته parent)

برای همین میگم اگه میشد کاری کرد که مثل افزونه Parent Category Toggler تمام مطالب قبلی هم دسته parent آنها برای هر پست انتخاب می شد ، مشکل حل میشد.

لینک به ارسال

من فرض رو بر این میگیرم که دسته بندی شما شبیه به این باشه :

# جاذبه های گردشگری

┘--- جاذبه های طبیعی

┘------ آبشارها

┘-------- آبشار یخی ⦿

┘-------- آبشار قلعه دختر

┘-------- ...

# شهرها

┘---- استان مازندران

┘------ شهر آمل ⦿

من این دسته بندی رو تست کردم نتیجه مثبت بود.


<?php
$args = array(
"category__and" => array( 293, 296 ) // آیدی دستۀ آبشار یخی و آیدی دستۀ شهر آمل
);

$new_query = new WP_Query( $args );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): $new_query->the_post();

?>
<h3 dir='rtl' style="font: 18px/25px 'Tahoma'; padding:10px 100px;" ><?php the_title(); ?></h3>
<?php
endwhile; endif; $new_query->rewind_posts();
?>

اسکرین شات

cff38fc63d37a9df34e03a81232e3fc799ea0521.png

اگه سوالی هست من در خدمتم. :)

.

لینک به ارسال

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

دقیقا مشکل همینجاست. چون من در اون صفحه آیدی دسته شهر آمل رو انتخاب می کنم و آیدی دسته جاذبه های گردشگری (نه دسته آبشاریخی)

در دسته شهرها چون دسته child انتخاب می شود کار درست است ولی در دسته جاذبه ها ، چون دسته parent انتخاب می شود، کار ایراد پیدا می کند.

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

آدرس افزونه : https://wordpress.org/plugins/batch-cat/

با اینکار اگر هم دسته parent یعنی جاذبه های گردشگری رو انتخاب کنم کار درست می شود. بازهم از شما ممنونم.

لینک به ارسال

من فکر می کنم شما آیدی دسته هارو به درستی داخل کوئری قرار نمی دید، یه بار دیگه من تست رو با آیدی Parent و آیدی Child تکرار کردم و همچنان برای من کار می کنه :

# جاذبه های گردشگری ⦿

┘--- جاذبه های طبیعی

┘------ آبشارها

┘-------- آبشار یخی

┘-------- آبشار قلعه دختر

┘-------- ...

# شهرها

┘---- استان مازندران

┘------ شهر آمل ⦿

a1a66f44fda19b7a070b8f1f488fbfd5cb4f4b91.png

من فقط آیدی Parent رو وارد کد کردم و تغییر دیگه ای داخلش اعمال نشده :


<?php
$args = array(
"category__and" => array( 296, 290 ) // آیدی دستۀ جاذبه های گردشگری و آیدی دستۀ شهر آمل
);

$new_query = new WP_Query( $args );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): $new_query->the_post();

?>
<h3 dir='rtl' style="font: 18px/25px 'Tahoma'; padding:10px 100px;" ><?php the_title(); ?></h3>
<?php
endwhile; endif; $new_query->rewind_posts();
?>

سعی کنید مشکل رو پیدا کنید، چون ممکن مدتی بعد دوباره مشکل دیگه ای برای سایتتون پیدا بشه، اون پلاگین هم بیش از 2 ساله که بروزرسانی نشده و این، هم از نظر امنیتی مشکل داره ، هم ممکن سازگاری کاملی با وردپرس جدید شما نداشته باشه و بعدا مشکلاتی واستون بوجود بیاره. در هر صورت با تست هایی که من روی مشکل شما داشتم، مطمئنا کلاس WP_Query مساله ای نداره و به درستی کار می کنه، پیشنهاد می کنم برای اینکه مطمئن بشید این روش درست کار می کنه ، اول سعی کنید آیدیهارو به صورت دستی و استاتیک داخل کلاس قرار بدید، بعد اگه کلاس درست واستون کار کرد از متغیرها و توابع دیگه استفاده کنید.

.

لینک به ارسال

ممنون از شما. شما درست می فرمائید ولی تفاوت پاسخ آخری شما با سیستم بنده خیلی سادست . شما تیک دسته جاذبه های گردشگری parent رو زدین ولی من در سیستم نزدم و فقط دسته child یعنی آبشار رو زدم.

لینک به ارسال

من رو ببخشید اما پست های شما تناقض داره ، من در این پست از آیدی Child ( دسته شهر آمل ) به همراه آیدی یک Child که خودش Parent هم هست ( دسته آبشار یخی ) استفاده کردم اما شما در پاسخ گفتید که :

دقیقا مشکل همینجاست. چون من در اون صفحه آیدی دسته شهر آمل رو انتخاب می کنم و آیدی دسته جاذبه های گردشگری (نه دسته آبشاریخی)

اما حالا نظرتون این هستش که آیدی دسته "آبشار" رو به همراه آیدی دسته "شهر آمل" انتخاب کردید، هر چند تفاوتی نمی کنه و شما اگه هر چندتا آیدی دسته های Parent و Child رو به پستتون پیوست کنید نباید این کوئری مشکلی داشته باشه، اما از اونجائی که پلاگینی که نام بردید براتون کار می کنه، واضحه که روشی که استفاده می کنید متفاوت هستش، به این خاطر که پلاگین از پروپرتی cat به جای category__and استفاده می کنه.

وقتی که شما از پروپرتی cat استفاده می کنید، در واقع منظورتون این هستش : پست های که آیدی دستۀ اونها 296 یا 297 یا 298 باشه، از نظر کوئری داشتن یک کدوم از این آیدی ها برای نمایش پست شما کفایت می کنه، این با اون چیزی که شما در ابتدای بحث اشاره کردید متفاوته، اما با این حال اگه این روش برای شما کار می کنه کدش شبیه به این می تونه باشه :


<?php
// $args = array(
// "category__and" => array( 296, 290 ) // آیدی دستۀ جاذبه های گردشگری و آیدی دستۀ شهر آمل
// );

$args = array(
"cat" => '296, 290' // آیدی دسته های شهر آمل و جاذبه های گردشگری
);

$new_query = new WP_Query( $args );
if( $new_query->have_posts() ) : while( $new_query->have_posts() ): $new_query->the_post();

?>
<h3 dir='rtl' style="font: 18px/25px 'Tahoma'; padding:10px 100px;" ><?php the_title(); ?></h3>
<?php
endwhile; endif; $new_query->rewind_posts();
?>

به این نکته توجه داشته باشید که من در تست سوم تنها دستۀ "آمل" رو انتخاب کردم و دستۀ "جاذبه های گردشگری" رو انتخاب نکردم، اما کوئری با پروپرتی cat هر 3 پست رو برای من نمایش میده.

.

e60e45201b085a8bf84534c5f8fc1616911c2b4c.png

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

.

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

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

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

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

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

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

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

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

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

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