تعداد بازدید: 3253

WP_Query در وردپرس

مدل محتوای (Model) وردپرس پست است ، یعنی محتواها در قالب های مختلف پست هایی با ویژگی های مختلف می باشند. کلاس WP_Query یک کلاس برای درخواست پست (request to a WordPress blog) می باشد.

نکته :‌ وردپرس از معماری MVC پیروی می کند . مدل در این سیستم کلاس WP_Post می باشد و کلاس WP_Query صرف برای دریافت اطلاعات از پست ها است.

هر صفحه ای از وردپرس که باز کنید از یک قالب (Template OR View) پیروی می کند که در درون آن یک شئ برگرفته شده از کلاس WP_Query می باشد. پس شئ جاری (current queried object) حاوی اطلاعات موجود در قالب است که با قرار گرفتن در حلقه اصلی صفحه اطلاعاتش قابل بازیابی می باشند.

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

حال ما می توانیم current query object را در حلقه دریافت اطلاعات قرار دهیم یا این که خودمان یک شئ جدید بسازیم و آن را در حلقه قرار دهیم.

نکته : معمولا در سیستم های MVC با دسترسی مستقیم به هر Model ما می توانیم Resource های مربوط به آن را بدست بیاوریم. اما در وردپرس چون مدل یکتای WP_Post را داریم و سایر مدل ها نیز از این کلاس extends می شوند یک کلاس خاص برای دستیابی به اطلاعات داریم WP_Query .

The Default Loop

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

if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		#Post Content here
	} //endwhile
} //endif

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

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

WP_Query

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

برای ساخت شی باید query variable های شئ را به آن بدهیم و در نهایت با استفاده از حلقه استاندارد اطلاعات پست ها را بازیابی کنیم

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {

	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		# post-template functions
	}

	/* Restore original Post Data */
	wp_reset_postdata();
} else {
	// no posts found
}

متغیر $args در کد بالا لیست query variable های ساخته شده برای یک شئ می باشد که پست های بازیابی شده بر اساس همین پارامتر ها تعیین می شوند. به عبارت دیگر پارامترهایی است که در زمان ساخت شئ به کلاس پاس می دهیم که از نوع آرایه انجمنی است.

زمانی که شئ را می سازیم (در مثال بالا $the_query) به یک سری اطلاعات از شئ‌ ساخته شده از طریق متد ها و ویژگی های درخواست (Methods & Properties) دسترسی خواهیم داشت.

برخی method های شئ ایجاد شده از روی WP_Query :

  • get( $query_var ) : دریافت query variable موجود در شئ . مثال $the_query->get('post_type')
  • set( $query_var, $value ) : ست کردن query variable روی شئ مورد نظر. مثال $the_query->get('post_type',array('product'))

برخی property های شئ ایجاد شده از روی WP_Query :

  • post_count : تعداد پست های نمایش داده شده بر اساس کل پست های پیدا شده و posts_per_page .
  • found_posts : تعداد کل پست ها بر اساس query variable که برای این شئ در نظر گرفتیم .
  • query_vars : یک آرایه انجمنی از query variable های داده شده در زمان ساخت شئ .

WP_Query Params

لیست پارامتر هایی که در زمان ساخت شئ به آن می دهیم تا پست های مد نظرمان را تعیین کنیم بر اساس دسته بندی های تعیین می شود. برخی از موارد مهم آن عبارتست از :

  • Author Parameters : بازیابی پست ها بر اساس نویسنده خاص
  • Category Parameters : نمایش پست ها بر اساس دسته بندی
  • Tag Parameters : نمایش پست ها بر اساس برچسب
  • Taxonomy Query : نمایش پست ها بر اساس Taxonomy term
  • Post & Page Parameters : بر اساس ویژگی های شاخص پست ها نظیر ID , name , title , parent
  • Type Parameters : نوع پست یا همان Post Type
  • Comment Parameters : بر اساس دیدگاه ها . همان طور که می دانید هر دیدگاه برای یک پست ایجاد می شود پس پست ها و دیدگاه ها با هم در ارتباط می باشند.
  • Pagination Parameters : پارامتر های مربوط به pagination که شامل مقادیری چون posts_per_page , pages , page , … می باشد.
  • Search Parameter : نمایش پست بر اساس عبارت جستجو شده در post_name , post_content که برای ساخت جستجو از آن استفاده می کنیم.
  • Custom Field Parameters : نمایش پست ها بر اساس اطلاعات متا یا Meta Query

چند مثال کاربردی در رابطه با استفاده از این پارامتر ها جهت نمایش پست ها :

نمایش پست ها بر اساس ID : مثلا می خواهیم یک تعداد پست را بر اساس ID آن ها نمایش دهیم.

$query = new WP_Query( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );

Exclude کردن پست خاص : مثلا داریم پست های مشابه را نمایش می دهیم میخواهیم پستی خاص نمایش داده نشود :

$query = new WP_Query( array( 'post__not_in' => array( 14, 20 ) ) );

نمایش page خاص از لیست پست ها : پست های ما به صورت صفحه بندی شده (در هر صفحه تعدادی پست posts_per_page) نمایش می دهیم. مثلا بخواهیم صفحه N ام از لیست پست ها را ببینیم:

$query = new WP_Query( array( 'paged' => 4 ) );

نکته : از پارامتر paged برای ساخت pagination و از پارامتر s برای ساخت جستجو استفاده می شود.

Change WP_Query Object

بر اساس query variable ها یا پارامتر هایی که در زمان ساخت شئ تعیین کردیم پست ها از مدل WP_Post بر می گردد. حال این که پس از زمان ساخت شئ نیز با استفاده از قلاب pre_get_posts می توان query را تغییر داد.

function my_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '123' );
    }
}
add_action( 'pre_get_posts', 'my_home_category' );

در مثال بالا در صفحه home پست های دسته بندی با شناسه 123 را نیز اضافه کرده است.

همچنین اگر در قالب کد باشید می توانید با استفاده از تابع get_queried_object به شئ جاری دسترسی پیاد کنید. مثلا در قالب taxonomy می توانید نام term را پیدا کنید.

$queried_object = get_queried_object();
var_dump( $queried_object );

نکته : دقت داشته باشید که شئ جاری $queried_object با شئ $wp_query تفاوت دارد. $queried_object یک شئ ساخته شده از روی مدل متناسب (مثلا WP_Post) با قالب می باشد و شئ $wp_query یک شئ که اطلاعات کوئری را دارد می باشد و از روی WP_Query ساخته شده و مربوط به کنترلر می باشد.

global $wp_query;
echo $wp_query->max_num_pages;

تابع get_post و get_posts هم بر اساس همین کلاس کار می کنند . در پنل ادمین معمولا برای دریافت پست ها از این توابع استفاده می شود. پارامتر هایی که این توابع می گیرند دقیقا مشابه پارامتر های کلاس WP_Query می باشد.

مطالب مشابه

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

تکسونومی ها (taxonomy) در وردپرس

در این مقاله قصد داریم تا دسته بندی ها و تگ ها یا به صورت کلی تر taxonomy ها رو در وردپرس بررسی کنیم و پارامتر های تابع...

Settings API در ووکامرس

ما برای ساخت پنل تنظیمات برای افزونه ها از api خود وردپرس استفاده می کردیم. حال این که افزونه مکمل برای ووکامرس می...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای WP_Query در وردپرس

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *