✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak utworzyć stronę archiwów (podsumowanie) dla wszystkich postów/stron WordPress za pomocą PHP?

34

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.

Źródło nagrywania: helloacm.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów