Filtrowanie komentarzy w Wordpresie

.

Kilka dni temu natrafiłem na mały problem związany z komentarzami. Mianowicie chodziło o ich typ. Aktualnie WordPress posiada trzy typy komentarzy, zwykłe, który oznaczany jest z pomocą pustego łańcucha znaków w bazie danych, komentarze typu trackback i komentarze typu pingback.

Ponieważ komentarze typu pingback i trackback nie wnoszą zbyt wiele, postanowiłem oddzielić je od reszty i nie wyświetlać. Problem jest w sumie stary jak świat i ma tysiąc rozwiązań. Poniżej przedstawiam moje własne, którke i dość łatwe do zaimplentowania.

Aby pobrać wszystkie komentarze dla wpisu można skorzystać z funkcji get_comments, która zwraca tablicę obiektów. Pozostaje odfiltrować te, których atrybut type ma wartość inną niż pusty łańcuch znaków. Poniższa funkcja dokładnie to robi. Pobiera ona tablicę zwróconą przez get_comments zwracając tablicę z obiektami o rządanym atrybucie type.


function get_only_true_comments($comments){
  $out = array();
  foreach($comments as $comment){
    if( empty($comment -> comment_type) ){
      $out[] = $comment;
    }
  }
  return $out;
}

Powyższa funkcja powinna znaleźć się w pliku functions.php aktywnego motywu. A jej użycie może wyglądać jak następuje:


get_only_true_comments( get_comments(array('post_id' => $post -> ID,'order' => 'ASC')) );

Zakładam użycie w pliku comments.php aktywnego motywu.

Wracając do kwestii pobierania komentarzy z bazy danych. Wśród wielu zmian jakie zaszły w wersji 3.0 WordPressa zdarzyła się jedna, która dotknęła get_comments. Funkcja ta została nieco rozszerzona i aktualnie uwzględnia nie tylko atrybut type ale również kilka innych, co znacznie ułatwi precyzyjne pobieranie komentarzy z bazy danych. Zainteresowanych szczegółami implemtacji odsyłam do pliku wp-includes/comment.php gdzie funkcja jest zlokalizowana.

Przydatne informacje na temat użycia funkcji get_comments 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>