✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Как создать страницу архивов (резюме) для всех сообщений/страниц WordPress с помощью PHP?

26

Я только что создал две сводные страницы для двух своих блогов: https://helloacm.com/archives-of-pagesposts/ и http://www.codingforspeed.com/archives-of-pagesposts/.

На обеих страницах все статьи (включая страницы) отсортированы по месяцам. Количество комментариев к каждому сообщению будет подсчитано и напечатано после заголовка сообщения в скобках.

Это может быть полезно для перечисления всех статей/страниц для пользователей и поисковых систем, поэтому эта страница также служит картой сайта.

Как вы можете видеть на сводной странице, сначала выводится общее количество сообщений/страниц, а для каждого месяца (только если в этом месяце опубликовано хотя бы одно сообщение/страница) будут генерироваться ссылки с отступом.

Итак, как мы собираемся этого добиться? Прежде всего, в WordPress вам понадобятся некоторые плагины, чтобы иметь возможность включать PHP-код в записи/страницы. Перейдите в панель управления WordPress после входа в систему и перейдите к «Плагины» и «Добавить новый». Найдите «Включить PHP», и вы найдете множество вариантов.

Затем скопируйте и вставьте следующий код PHP в один файл PHP в корневом каталоге темы.

// <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>";

Алгоритм здесь состоит в том, чтобы сгруппировать по годам и месяцам в SQL и зациклить каждый месяц и получить все сообщения/страницы за этот месяц. Используйте глобальную переменную $wpdb для запуска оператора SQL. Используйте get_var для операторов SQL с одной переменной, таких как select count(1), и используйте get_results для нескольких строк.

Измените имя таблицы wordpress wp_posts, если префикс не wp_. Однако вы можете использовать $wpdb->posts для получения имени таблицы сообщений, что является лучшим методом. Отфильтруйте сообщения/страницы, соответствующим образом изменив соответствующие операторы SQL (где причина).

Кроме того, лайки в Facebook учитываются и также включаются в скобки. Для этого вам нужно будет создать еще одну таблицу с парой ключей для идентификатора статьи и числа лайков. Вам нужно будет настроить crontab, который запускается, возможно, один раз в час, чтобы обновлять количество лайков в Facebook (или других социальных сетях) для каждого сообщения. Об этом будет рассказано в другом отдельном уроке.

Источник записи: helloacm.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее