با عرض سلام خدمت دوستان و همراهان نوراتمز در این آموزش قصد دارم تا باهم نحوه فراخوانی دسته ای خاص از مطالب (که ما ویژگی های آن را تعین خواهیم کرد) را در وردپرس برسی کنیم.
- سطح آموزش :متوسط – پیشرفته
- پیش نیاز :آشنایی با ساختار توابع و کلاس ها در PHP–آشنایی با ساختار حلقه و نمایش مطالب در وردپرس
قبل از شروع نگاهی به مکانزیم دریافت اطلاعت یک مطلب در وردپرس می اندازیم.
در حالت حلی اطلاعات توسط کوئری(query) از پایگاه داده فرا خوانده می شود و سپس توسط حلقه(loop) با کمک دستورات شرطی نمایش داده می شود.ما قصد ساختن اطلاعات جدید(پست های سفارشی) نداریم و فقط قصد فیلتر اطلاعات دریافتی از دیتابیس را داریم.پس کار ما از تعریف کوئری خاص شروع میشود و با تغیراتی جزئی در حلقه آنها را در جایی که بخواهیم نمایش می دهیم و در آخر کوئری را برای استفاده های دیگر آزاد میکنیم(ریست) .
1-1 ساختن کوئری جدید:
مسئول تولید کوئری ها در وردپرس کلاس WP_Query می باشد که به طور پیشفرض اطلاعات خود را در متغیر wp_query$ ذخیره میکند حالا می خواهیم خورجی دلخواه از کلاس مذکور را با توجه به اطلاعتی که در آگومان کلاس وارد می کنیم در متغیر دیگری ذخیره کنیم.برای مثال ما از WP_Query میخواهیم اطلاعات مربوط به مطالب مربوط به دسته ای که شناسه آن 3 می باشد را در متغیر my_query$ ذخیره کنید برای اینکار یک شی جدید از کلاس WP_Query میسازیم
1 2 3 4 5 6 |
<?php $my_query=new Wp_Query('cat=3'); ?> |
خب حالا ما یک کوئری جدید داریم که شامل کلیه مطالب دسته ای خاص است.برای پیدا کردن شناسه دسته ها به قسمت دسته ها در داشبرد بروید وری دسته مورد نظر کلیک کنید سپس در آدرس بار مرور گر دنبال Id بگردید.یک همچین عبارتی هست : category&tag_ID=3 (در اینجا ما میخواهیم مطالب دسته با شناسه 3 را نمایش دهیم.)
1-2 توسعه کوئری :
برای اعمال فیلتر ها دسته ما باز تر از تعین دسته ای خاص هست ما میتوانیم اطلاعات بیشتری از WP_Query درخواست کنیم مثلا میخواهیم هم مطالب دسته 3 و هم دسته 6 را نشان دهیم یا تعین کنیم در هر صفحه چه تعداد مطلب باشد یا همه مطالب به غیر از دسته ای خاص یا حتی میتوانید به جای شناسه از نام دسته برای اعمال فیلتر استفاده کنید خوب اگر از ساخنار بالا استفاده کنیم کد ناخوانا و می شود و احتمال خط پس اطلاعات ورودی را به صورت آرایه به WP_Query میدهیم به صورت زیر:
1 2 3 4 5 6 7 8 9 10 |
<?php $my_query=new WP_Query(array( 'post_status' =>'publish', 'post_type' =>'post', 'cat' =>'3', 'posts_per_page' =>'2', )); ?> |
- خط 4 : انتخاب بر حسب وضعیت پست ها در اینجا ما پست های منتشر شده را انتخاب کردیم.
- خط5: نوع پستی که میخواهیم نشان دهیم .در اینجا ما مطالب پشیفرض را انتخاب کردیم .شما میتوانید نوع پست سفارشی خود مثلا محصولات … را بنویسید.
- خط 6 : مشخص کردن دسته ی مطالب .می توانید با استفاده از (,) چند دسته را انتخاب کنید.
- خط 7: تعین تعداد مطالبی که می خواهیم در صفحه نوشته شود.
آرگومان های که در آرایه مقدار دهی شده از قبل در WP_Query تعریف شده و باید در املا آنها دقت کنید همچنین آرگومان ها ی بیشتری نیز موجود است که ذکر همه آنها در این مقاله نمیگنجد اما من مراجعی را به شما معرفی خواهم کرد که در این زمینه به شما کمک کند مثلا میتوانید نوشته های که نویسنده را برحسب نامش انتخاب کنید یا محتویات یک صفحه را بر حسب شناسه انتخاب کنید….
2 نمایش کوئری درمکان دلخواه:
حالا که اطلاعات ما آماده شده یک جایگزین برای wp_query$ داریم یادتان باشد این متغیر پیشفرض در سازنده کلاس می باشد که متد های ()have_post و ()the_post..روی این متغیر عمل می کنند حالا ما باید به وسیله حلقه همان کاری را که برای نمایش مطالب انجام می دادیم با استفاده از مرجع جدید که همان my_query$ هست انجام دهیم.شاخ وبرگ دادن به حلقه در این آموزش مد نظر نمی باشد کار اصلی ما همان مرحله قبل بود در اینجا به ساختن یک لیست از مطالب بسنده میکنیم بدیهی است که شما میتوانید به هر شکل که دوست دارید مطالب را نشان دهید مثلا با ذکر تاریخ نشر و نام نویسنده و…
در حالت کلی ساختار حلقه به این صورت است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php if ( have_posts() ) : while ( have_posts() ) :the_post(); ?> <ul> <li><a href="<?php the_permalink() ?>" title="<?php the_title_attribute();?>"><?php the_title(); ?></a></li> </ul> <?php // Stop the loop when all posts are displayed endwhile; // If no posts were found else : ?> <p>متاسفانه مطلبی پیدا نشد</p> <?php endif; ?> |
حالا باید کد بالا رو برای کوئری خودمان سفارشی کنیم و کد نهایی به شکل زیر در می آید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); ?> <ul> <li><a href="<?php the_permalink() ?>" title="<?php the_title_attribute();?>"><?php the_title(); ?></a></li> </ul> <?php // Stop the loop when all posts are displayed endwhile; // If no posts were found else : ?> <p>متاسفانه مطلبی پیدا نشد</p> <?php endif; ?> |
*به تغیرات در خط دوم توجه کنید حالا مطالبی که ما میخواهیم در حلقه به نمایش در می آید
سوال: چرا در آخر کوئری را ریست نکردیم؟پاسخ ساده است ما با متغیر پیشفرض wp_query$ کاری نداشتیم و از همان اول کوئری را در متغیر my_query$ ذخیره کردیم که اینکار بهتر است .اما این را به عنوان نکته به یاد داشته باشید بعضی اوقات شما ترجیه می دهید که به کد های حلقه و صفحه بندی … دست نزنید یا انجام این کار مشکل ساز باشد در این صورت ما کوئری جدید را در wp_query$ ذخیره می کنیم و در نهایت با دستور زیر کوئری پیشفرض را برای استفاده های بعدی در صفحات دیگر ریست میکنیم.
1 2 3 |
<?php wp_reset_query(); ?> |
سعی کنید امتحان کنید و با مشکلات احتمالی دست به یقه شید و لذت ببرید! مثلا می تونید روی صفحه بندی مطالبی که فیلتر کردید کار کنید و هماهنگی با افزونه صفحه بندی…
سعی میکنم در آینده راهکار حل این چالش جدید هم برسی کنیم پس شما هم روش کار کنید
در پناه خدا
مراجع مفید برای WP_Query :
2 دیدگاه برای “آموزش فراخوانی دسته ای خاص از نوشته ها در وردپرس”
سلام من کدی میخوام که:
چند تا دسته مادر دارم ، مثلاً موسیقی خب؟ این موسیقی خودش زیر دسته داره مثلا پاپ ، کلاسیک ، رپ حالا زیر دسته ایی که پاپ بوده اینم بازم زیر دسته داره مثل: پاپ ایرانی ، پاپ خارجی کدی میخوام که فقط زیر موضوع های پاپ رو بهم بده
سلام به عزیزان
فرض کنید:
چند تا دسته مادر دارم ، مثلاً موسیقی خب؟ این دسته موسیقی خودش زیر دسته داره مثلا پاپ ، کلاسیک ، رپ
حالا زیر دسته هاش هم خودشون به چند دسته تقسیم میشن، مثلا دستهای که پاپ بوده اینم زیر دسته داره مثل: پاپ ایرانی ، پاپ خارجی، پاپ ترکی
حالا در فراخوانی دسته بندیها به کد یا ترجیحا افزونهای نیاز دارم که فقط دستههای فرزند هر دسته رو نمایش بده. مثلا: در دسته بندی موسیقی فقط همون فرزندهای خودش (پاپ، کلاسیک، رپ) رو نشون بده.
لطفا راهنمایی بفرمایید
ممنون از پاسخگوییتان