WordPress – Popularne posty + plugin do obrazków
Sporo czasu kombinowałem jak wydobyć z wordpressa posty z danej kategorii sortowane według ilości komentarzy. Żadna z podstawowych funkcji wordpressa nie dawała takich możliwości a przynajmniej cała noc spędzona nad dokumentacją nie dała mi podstaw by myśleć inaczej. Swoją drogą codex WP doprowadza mnie do szału gdy tylko próbuję coś znaleźć, sam fakt że w [...]
Sporo czasu kombinowałem jak wydobyć z wordpressa posty z danej kategorii sortowane według ilości komentarzy. Żadna z podstawowych funkcji wordpressa nie dawała takich możliwości a przynajmniej cała noc spędzona nad dokumentacją nie dała mi podstaw by myśleć inaczej. Swoją drogą codex WP doprowadza mnie do szału gdy tylko próbuję coś znaleźć, sam fakt że w oficjalnej dokumentacji brakuje opisu mnóstwa funkcji jest przytłaczający…
<?php
// Id aktualnej kategorii - mozna zmienić na $kategoria = ID_KATEGORII jesli chcemu ustawić to na sztywno
$kategoria = get_category(get_query_var('cat'),false);
// Pobieramy Id wszytskich podkategorii
$podkategorie = get_categories('child_of='.$kategoria->cat_ID);
// formatujemy wszytskie id w ciąg który przyjmnie baza
// Jesli nie chcemy wyciągać postów z podkategorii wywalamy pętle.
$wszystkie_kategorie = "'".$kategoria-> cat_ID."'";
foreach($podkategorie as $podkat)
{
$wszystkie_kategorie .= ",'".$podkat->cat_ID."'";
}
// Zapytanie do bazy :)
// w zależności czego potrzebujemy wystarczy dodac odpowiednie tabele
$posty = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS wp_posts.id, wp_posts.post_title, wp_posts.comment_count, wp_posts.post_date
FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
WHERE 1=1 AND wp_term_taxonomy.taxonomy = 'category'
AND wp_term_taxonomy.term_id IN (".$wszystkie_kategorie.")
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND wp_posts.comment_count > 0
GROUP BY wp_posts.ID ORDER BY wp_posts.comment_count DESC
LIMIT 5
");
// pętla robiąca nam z wyników liste w htmlu
foreach ($posty as $post)
{
setup_postdata($post);
$id = $post->id;
$tytul = $post->post_title;
$data = mysql2date('jS M', $post->post_date, $translate = true);
$ilosc = $post->comment_count;
if ($ilosc != 0)
{
$popularne .= '<li>';
$popularne .= '<a href="' . get_permalink($id) . '" title="' . $tytul . '">' . $tytul . '<span class="date">'.$data.'</span></a> ';
$popularne .= '</li>';
}
}
// wysłanie wyników do przeglądarki
echo $popularne;
?>
Ale wracając do tematu. Udało mi się wykrzesać kawałek kodu który pozwala na wyciąganie postów z konkretnej kategorii i wszystkich jej podkategorii sortując według ilości komentarzy. Wygląda to następująco:
Kod został napisany do działania w szablonie category.php ale jeśli ustawimy w pierwszej zmiennej $kategoria ID na sztywno możemy go wkleić gdziekolwiek. Jeszcze jako bonus dodam link do ciekawego pluginu który pozwala na zdefiniowanie wiekszej ilości dostepnych rozmiarów obrazków wysyłanych na serwer, prócz standardowych 4 możemy ich robić ile nam się podoba, bardzie fajnie działa z włączoną obsługą miniaturek postów. Włączamy je przez dodanie krótkiego kodu do pliku funkcji szablonu.
<?php add_theme_support( 'post-thumbnails' ) ?>
Plugin jest bardzo prosty w użyciu, a oto i link : Additional image sizes
