Właśnie stworzyłem dwie strony podsumowań dla moich dwóch blogów: https://helloacm.com/archives-of-pagesposts/ i http://www.codingforspeed.com/archives-of-pagesposts/.
Na obu stronach wszystkie artykuły (w tym strony) są sortowane według miesięcy. Liczba komentarzy do każdego postu zostanie policzona i wydrukowana po tytule posta w nawiasach.
Może to być dobre, aby wyświetlić wszystkie artykuły/strony dla użytkowników i wyszukiwarek, więc ta strona służy również jako mapa witryny.
Jak widać na stronie podsumowania, najpierw drukuje całkowitą liczbę postów/stron, a dla każdego miesiąca (tylko jeśli w danym miesiącu jest opublikowany przynajmniej post/strona) wygeneruje wcięte linki.
Jak więc zamierzamy to osiągnąć? Po pierwsze, w WordPressie potrzebujesz wtyczek, aby móc dołączyć kod PHP do postów/stron. Po zalogowaniu przejdź do panelu sterowania wordpress i przejdź do Wtyczek i „Dodaj nowy". Wyszukaj 'Dołącz PHP’, a znajdziesz wiele opcji.
Następnie skopiuj i wklej następujący kod PHP do pojedynczego pliku PHP w katalogu głównym motywu.
// <a class="vglnk" target="_blank" href="http://helloacm.com" rel="nofollow"><span>helloacm</span><span>.</span><span>com</span></a>
global $wpdb;
$query = "select count(1) from `wp_posts` where (post_type = 'page' or post_type = 'post') and `post_status` = 'publish'";
$total = $wpdb->get_var($query);
echo "<h2>Archives</h2>";
$query = "select concat(year(`post_date`), '-', month(`post_date`)) as `month`, count(1) as `cnt` from `wp_posts` where (post_type='page' or post_type='post') and `post_status` = 'publish' group by `month` order by `post_date` desc";
$result = $wpdb->get_results($query);
echo "<ul>";
if ($result) {
foreach ($result as $month) {
echo "<li>".$month->month." (".$month->cnt.")</li>";
$m = explode('-', $month->month);
$y = $m[0];
$m = $m[1];
$q = "select `post_name`, `post_title`, day(`post_date`) as `day`, `id` from `wp_posts` where (post_type='page' or post_type='post') and `post_status` = 'publish' and month(`post_date`)='$m' and year(`post_date`)='$y' order by `post_date` desc";
$r = $wpdb->get_results($q);
if ($r) {
echo "<ul>";
foreach ($r as $post) {
$cnt = $wpdb->get_var("select count(1) from `wp_comments` where `comment_approved`=1 and `comment_post_ID` = ".$post->id);
if (!$cnt) $cnt = 0;
echo "<li>".$post->day.": <a title='".htmlentities($post->post_title, ENT_QUOTES)."' href='<a class="vglnk" target="_blank" href="https://helloacm.com/".$post-" rel="nofollow"><span>https</span><span>://</span><span>helloacm</span><span>.</span><span>com</span><span>/".$</span><span>post</span><span>-</span></a>>post_name."/'>".$post->post_title."</a> ($cnt)</li>";
}
echo "</ul>";
}
}
}
echo "</ul>";
Algorytm tutaj polega na grupowaniu według rok-miesiąc w SQL i zapętleniu każdego miesiąca i pobieraniu wszystkich postów/stron z tego miesiąca. Użyj zmiennej globalnej $wpdb, aby uruchomić instrukcję SQL. Użyj get_var dla pojedynczych zmiennych instrukcji SQL, takich jak select count(1) i użyj get_results dla wielu wierszy.
Zmień nazwę tabeli wordpress wp_posts, jeśli przedrostkiem nie jest wp_. Możesz jednak użyć $wpdb->posts, aby uzyskać nazwę tabeli posts, co jest lepszą metodą. Filtruj posty/strony, odpowiednio zmieniając odpowiednie instrukcje SQL (gdzie przyczyna).
Dodatkowo, polubienia na Facebooku są również liczone i uwzględniane w nawiasach. Aby to zrobić, musisz utworzyć kolejną tabelę, która ma parę kluczy dla identyfikatora artykułu i numeru polubień. Będziesz musiał skonfigurować crontab, który uruchamia się raz na godzinę, aby aktualizować polubienia na Facebooku (lub inne sieci społecznościowe) dla każdego posta. Zostanie to omówione w innym osobnym samouczku.