شیء query_posts قسمت اول

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

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

شاید همین ابتدا بپرسید query_posts چیست؟

احتمالا شما خیلی از این تابع وردپرس استفاده کرده اید، مثلا وقتی که مطالب مرتبط برای سایتتون به نمایش میگذارید، حالا همین مطالب مرتبط میتونه براساس برچسب باشه یا براساس موضوع نوشته، یا موقعی که در ابزارک مطالب تصادفی نشون میدید، یا زمانی که مطالب محبوب رو نشون میدید (البته اگر براساس بیشترین دیدگاه باشه) و خیلی جاهای دیگه در حال استفاده از query_posts هستید.

بگذارید یک مقدار برای دوستانی که تازه کار با وردپرس و طراحی قالب رو شروع کردند توضیح بدهیم.

شاید در مورد حلقه وردپرس زیاد شنیده باشید، در اصل برای نمایش پست ها (مطالب) از حلقه استفاده می کنیم، مثلا برای نمایش فقط عنوان آخرین مطالب سایت از کدی مانند کد زیر استفاده می کنیم:


            <?php while (have_posts()) : the_post(); ?>

                        <?php the_title(); ?>

            <?php endwhile; ?>

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

اگر این کد رو تست کنید، البته اگر خواستید این کارو بکنید در فایل index.php این تست رو انجام بدید، می بینید که پشت سر هم عنواین چندین پست آخر رو به نمایش میگذاره، اگر هم در تنظیمات وردپرستون گفته باشید که در هر صفحه ده مطلب نشون بده، این کد عنوان ده مطلب آخر رو نشون میده.

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

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

خب اگر بخواهیم کد بالا رو به حالت کوئری پست در بیاریم یه چیزی میشه شبیه کد زیر:


            <?php query_posts( ); ?>

            <?php while (have_posts()) : the_post(); ?>

                        <?php the_title(); ?>

            <?php endwhile; ?>

            <?php wp_reset_query(); ?>

خب اگر دقت کنید، دو قسمت به کد اضافه شده، اولین خط و آخرین خط.

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

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

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

خب اگر بخواهیم کدمون رو تغییر بدیم و با query_posts کاری کنیم که به جای 10 پست (پیشفرض تنظیمات وردپرس) تعدادی که ما می خواهیم رو نشون بده خط اولرو به صورت زیر در می آوریم:


            <?php query_posts('posts_per_page=2' ); ?>

            <?php while (have_posts()) : the_post(); ?>

                        <br><?php the_title(); ?>

            <?php endwhile; ?>

            <?php wp_reset_query(); ?>

خب اگر به خط اول دقت کنید متوجه posts_per_page شده اید که مقدارش 5 هست، یعنی این که به جای پیش فرض وردپرس 5 مطلب نشون بده.

مورد بعدی وضعیت پست هست در حالت کلی مطالب وردپرس سه حالت میتونند داشته باشند، اولی منتشر شده (publish) ، دومی پیش نویس (draft) و سومی برای بازبینی (pending) هست، حالا حلقه وردپرس فقط مطالبی که منتشر شده اند رو نمایش میده یا به عبارت دیگه فقط مطالبی که وضعیتشون publish هست رو نشون میده، حالا اگر بخواهید کاری کنید که هر سه حالت رو نشون بده باید پست کوئریتون به شکل زیر باشه:

<?php
query_posts(  array('posts_per_page'
=> 2,'post_status' => array('publish','draft','pending')  )  );
?>

خب اگر دقت کنید حالت نوشتن امکانات در داخل پست کوئری یه مقدار تغییر کرده، اگر کمی پی اچ پی کار کرده باشید باید بدونید که به حالت آرایه ای در اومده.
تقریبا سه حالت برای نوشتن امکانات در داخل پست کوئری وجود داره،

  خطای Another Update in Process در وردپرس + راه حل رفع آن

اولی به صورت زیر هست:

<?php
query_posts( 'posts_per_page=5&post_status=pending'  ); ?>

که توی این حالت تمام موارد بین کوتیشن قرار میگیرند و با & جدا میشند، به کد بالا یک نگاهی بندازید متوجه می شوید. این حالت یک سری محدودیت داره و توی این مقاله ما کمتر از این حالت استفاده می کنیم.

حالت دوم به این صورت هست:

<?php
query_posts( array( 'posts_per_page' => 5, 'post_status' => 'pending'
)  ); ?>

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

حالت سوم هم اینه که ما داخل کوئری پست میگیم که امکانات رو از درون یک متغیر (نیاز به یادگیری موارد ابتدایی پی اچ پی هست) بخونه که ما قبلا تعریفش کرده ایم به صورت زیر:


            <?php

            $args = array(

            'posts_per_page'
=> 5,

            'post_status'
=> 'pending',

            );

            ?>

            <?php query_posts( $args  ); ?>

            

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

خب شاید کمی خسته شده باشید، به هر حال مجبور به ادامه آموزش هستیم.

تا اینجا گفتیم که با کوئری پست تعداد مطالب قابل نمایش رو تغییر دادیم همچنین کمی از وضعیت نوشته گفتیم و گفتیم که هر نوشته توی وردپرس سه حالت کلی داره و حلقه وردپرس به صورت عادی فقط مطالبی که وضعیت اونها publish هست منتشرشده) رو نشون میده البته اگر میخواهید وضعیت یک نوشته رو با استفاده از کد به دست بیارید از کد زیر استفاده کنید:

<?php
get_post_status( 'آي دي نوشته اينجا'
) ?>

خب در دو حالت دیگه یا pending (برای بازبینی) هستند و یا draft (پیشنویس).

اگر بخواهید با استفاده از پست کوئری 5 مطلب نشون بدید اونم با هر وضعیتی (یعنی هر سه حالت) باید از کدی مثل کد زیر استفاده کنید:

<?php
query_posts( array(   'posts_per_page'
=> 5,   'post_status' =>
array('publish', 'pending', 'draft'),   )  ); ?>

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

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

خب مورد بعدی موضوع (دسته) نوشته هست، حالا ما میخواهیم 5 نوشته از یک دسته خاص به نمایش بگذاریم، اینجا باید با ID های دسته کار کنیم، قبلا در همیار در مورد به دست آوردن آی دی یک موضوع گفته شده و مطمئنا برای به دست آوردن آی دی دسته مشکلی نخواهید داشت.

به هر حال اگر بخواهید 5 مطلب فقط از دسته ای که آی دی اون مثلا 3 هست به نمایش بگذارید باید پست کوئریتون به شکل زیر باشه:

<?php
query_posts('cat=3&posts_per_page=5'); ?>

خب نکته ای که اینجا داره اینه که شاید شما احتیاج داشته باشید تا یک دسته رو محروم کنید یا اصطلاحا exclude کنیدش یعنی کاری کنید که تمام مطالب نشون داده بشند به جز دسته ای که شما محرومش کرده اید، برای اینکار فقط کافیه قبل از عدد آی دی اون دسته یک علامت – قرار بدید یعنی کد بالا به صورت زیر میشه:

<?php
query_posts('cat=-3&posts_per_page=5'); ?>
آیا این مقاله برای شما مفید بود؟
تقریبا
خیر

دیدگاهتان را بنویسید

ارسال دیدگاه به معنی این است که شما ابتدا قوانین ارسال دیدگاه را مطالعه کرده‌اید و با آن موافق هستید.