Zmiana domyślnego zapytania do bazy danych w Wordpresie

.

Dziś będzie trochę na temat tego jak zmienić domyślne zapytania do bazy danych, które jest wykonywanie w Wordpresie za pośrednictwem instancji klasy WP_Query.

WP_Query jest klasą, która ma za zadanie przeprwadzić konwersację z bazą danych w Wordpresie. Klasa ta otrzymuje informacje o zapytaniu z przeglądarki i na ich podstawie wykonuje zapytanie do bazy danych.

W tym wpisie chciałby się zająć sytuacji gdy konieczne jest zmodyfikowanie standardoweg zapytania do bazy danych. Załóżmy, że wmagane jest wyłącznie z rezulatatów zapytania grupa wpisów o określonych ID. Jednym ze sposobów osiągnięcia porządanego rezultatu jest zmodyfikowanie wartości własności query_vars obiktu $wp_query. Dodam jeszcze, że query_vars to dość rozległa tablica PHP, a obiekty $wp_query jest instancja klasy $WP_Query.

Załóżmy, że nie chcemy aby na głównej stronie bloga ukazały się wpisy o ID 50 lub 60. Porządany rezultat możemy osiągnąć umieszczając poniższy kod w pliku functions.php lub pliku wtyczki.


function without_the_posts(){
  if(is_home()){
    global $wp_query;
   $wp_query -> query_vars['post__not_in'] = array(50,60);
  }
}
add_action('pre_get_posts','without_the_posts');

Na początek tworzymy funkcję, która ma na celu modyfikację zapytania, co można osiągnąć przez przyporządkowanie tablicy z numerami ID niechcianych wpisów do własności query_vars o kluczu post__not_in.

Funkcję dodajemy do akcji pre_get_posts, która jest uruchamiana tuż przed wykonaniem zapytania do bazy danych. W rezultacie otrzymujemy tablicę z obiektami za wyjątkiem tych wykluczonych.

Wartości tablic query_vars mogą być również ustawiane za pomocą metody set obiektu $wp_query, która pobiera nazwę klucza i wartość do przporządkowania jako argumenty.

Funkcja z przykładu powyżej może być przepisana w sposób jak następuję:


function without_the_posts(){
  if(is_home()){
    global $wp_query;
    $wp_query -> set('post__not_in',array(50,60));
  }
}

W podobny sposób można ustawić inne zmienne zapytania. Załóżmy, że chcemy otrzymać:

wpisy należące do kategorii o id 1 i 2.

$wp_query -> set('category__and',array(1,2));

wpisy nie należące do kategorii o id 1,2 i 3

$wp_query -> set('category__not_in',array(1,2,3));

wpisy w kategorii o id 12 lub 14

$wp_query -> set('category__in',array(12,14));

wpisy o id taga 12 lub 14

$wp_query -> set('tag__in',array(12,14));

wpisy, które nie posiadają taga o id 14 lub 18

$wp_query -> set('tag__not_in',array(14,18));

wpisy posiadające tag o id 14 i 18

$wp_query -> set('tag__and',array(14,18));

wpisy, które posiadają tag o slugu "wordpress" lub "kod"

$wp_query -> set('tag_slug__in',array('wordpress,kod'));

wpisy które posiadają tag o slugu "wordpress" i "kod"

$wp_query -> set('tag_slug__and',array('wordpress,kod'));

Powyższe przykłady w żadnym stopniu nie wyczerpują, możliwości jakie daje klasa WP_Query. Do manipulacji udostępnia ona znacznie więcej zmiennych własności query_vars.

Klasę WP_Query można znaleźć w pliku wp-includes/query.php. Szerszy opis własności i metod instnacji klasy WP_Query można znaleźć na tej stronie kodeksu Wordpresa.


Twój komentarz





Niektóre tagi XHTML są dozwolone
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>