Class Tanımı : WP_Query

WordPress sistemi içerisinde temalarınızda, eklentilerinizde kullanabileceğiniz, hayli esnek bir class olan WP_Query size kendinize özel bir Loop oluşturmanızı sağlar. Sistem dahilinde olan $wp_query global tanımına müdahale etmeniz ve kullandığınız alanda istediğiniz düzeni gerçekleştirmenize katkıda bulunur. Aşağıda vereceğim sorgusal yapısıyla WordPress’e eklenti, tema geliştiren kişilerin favori classlarından biridir. Şahsen ben temalarda bu class’ı kullanmayı çok seviyorum.

Tıpkı daha önce anlattığım The Loop alanı gibi bir kullanımı vardır. Tek farkı çağırıldığı anda istediğiniz veriyi dökmesidir.

Aşağıdaki örneklerde de kullanıldığı gibi WP_Query ile while kullanıldığında the_post() fonksiyonuyla içerik çağırımı yapılacaksa, fonksiyon ve döngüs sonrasında wp_reset_postdata() fonksiyonunun çağırılması gerekmektedir.

Basit olarak WP_Query kullanımı;

Bir Loop döngüsü kullanmak istediğinizde şayet Wp_Query kullanılacaksa basit şekile kullanımı şu şekilde olacaktır (WordPress Codex örneği).

// Sorgu
$the_query = new WP_Query( $args );

// Loop Döngüsü
if ( $the_query->have_posts() ) {
 echo '<ul>';
 while ( $the_query->have_posts() ) {
  $the_query->the_post();
  echo '<li>' . get_the_title() . '</li>';
 }
 echo '</ul>';
} else {
 // Yazı bulunamadı
}

/* Orjinal yazı bilgisini sisteme geri verelim */wp_reset_postdata();

Yukarıda yaptığımız WP_Query içerisine $args ile belirli parametreler gönderiyoruz ve gerekli çıktıyı bir önceki yazıda anlattığım get_the_title() fonksiyonuyla çekiyoruz. Bu parametrelerle belirtilen çıktıyı sistemin gösterebilmesini sağlıyor. Sizi uyarırken bashettiğim gibi wp_reset_postdata(); fonksiyonuyla global veri çıktısını varsayılan haline döndürüyoruz ki sıkıntı yaşamdan çalışmaya devam etsin.

Wp_Query tam tanımı ve Parametreler;

Aşağıdaki tüm parametreler WP_Query class’ı ile kullanılabilir durumdadır. Düzenlemek ve kullanmak sizin elinizde :)

$args = array(
  
  //Sayfa ve Yazı parametreleri
  'p'             => 1,
  'name'          => 'hello-world',
  'page_id'       => 1,
  'pagename'     => 'sample-page',
  'post_parent'  => 1,
  'post__in'     => array(1,2,3),
  'post__not_in' => array(1,2,3),
  
  //Yazar Parametreleri
  'author'      => '1,2,3,',
  'author_name' => 'admin',
  
  //Kategori Parametreleri
  'cat'              => 1,
  'category_name'    => 'blog',
  'category__and'    => array( 1, 2),
  'category__in'     => array(1, 2),
  'category__not_in' => array( 1, 2 ),
  
  //Tür ve Durum Parametreleri
  'post_type'   => '',
  'post_status' => '',
  
  //Tür ve Durumların listesi aşağıdadır. Lütfen Buradan birini kullanın
  'post_type' => array(
   'post',
   'page',
   'revision',
   'attachment',
   'my-post-type',
   ),
  
  'post_status' => array(
   'publish',
   'pending',
   'draft',
   'auto-draft',
   'future',
   'private',
   'inherit',
   'trash'
   ),
  
  //Sıralama ve sıralama türü Parametreleri
  'order'               => 'DESC',
  'orderby'             => 'date',
  'ignore_sticky_posts' => false,
  'year'                => 2012,
  'monthnum'            => 1,
  'w'                   => 1,
  'day'                 => 1,
  'hour'                => 12,
  'minute'              => 5,
  'second'              => 30,
  
  //Etiket Parametreleri
  'tag'           => 'cooking',
  'tag_id'        => 5,
  'tag__and'      => array( 1, 2),
  'tag__in'       => array( 1, 2),
  'tag__not_in'   => array( 1, 2),
  'tag_slug__and' => array( 'red', 'blue'),
  'tag_slug__in'  => array( 'red', 'blue'),
  
  //Sayfalama Parametreleri
  'posts_per_page'         => 10,
  'posts_per_archive_page' => 10,
  'nopaging'               => false,
  'paged'                  => get_query_var('paged'),
  'offset'                 => 3,
  
  //Özel alan Parametreleri
  'meta_key'       => 'key',
  'meta_value'     => 'value',
  'meta_value_num' => 10,
  'meta_compare'   => '=',
  'meta_query'     => array(
   array(
    'key' => 'color',
    'value' => 'blue',
    'type' => 'CHAR',
    'compare' => '='
   ),
   array(
    'key' => 'price',
    'value' => array( 1,200 ),
    'compare' => 'NOT LIKE'
   ),
  
  //Taksonomi Parametreleri
  'tax_query' => array(
  'relation'  => 'AND',
   array(
    'taxonomy'         => 'color',
    'field'            => 'slug',
    'terms'            => array( 'red', 'blue' ),
    'include_children' => true,
    'operator'         => 'IN'
   ),
   array(
    'taxonomy'         => 'actor',
    'field'            => 'id',
    'terms'            => array( 1, 2, 3 ),
    'include_children' => false,
    'operator'         => 'NOT IN'
   )
  ),
  
  //İzin Parametreleri
  'perm' => 'readable',
  
  //Cache ile ilgili Parametreler
  'no_found_rows'          => false,
  'cache_results'          => true,
  'update_post_term_cache' => true,
  'update_post_meta_cache' => true,
  
 );

$query = new WP_Query( $args );

WP_Query ile ilgili anlatacaklarım bu kadar. Bir sonraki yazımda query_posts tanımıyla sizlerle olacağım.

Serkan Algur: WordPress ile uğraşan deli bir adam...

This website uses cookies.