如何在 Blogger 文章加延伸閱讀、相關文章?

其實我最近文荒,不知道要寫什麼,剛好有網友留言詢問我的「延伸閱讀」是不是用程式碼自動產生的。老實說還真不是,因為之前查到的方法都是要去修改主題,我個人超討厭直接修改主題的,這樣換主題還要再重弄一次。

所以,我花了點時間研究別人的程式再搭配自己的想法,寫出一個我自己喜歡的。
原理是抓取相同標籤的文章,隨機選 5 篇顯示在文章後面。

步驟基本和之前一樣,新增 HTML/JavaScript 小工具,並貼入程式碼,想知道的可以去看「如何在 Blogger 文章加目錄索引?」或「如何在 Blogger 裡放程式碼?」這兩篇文章內有寫。

這次要貼的程式碼如下:
  1. <style type="text/css">
  2. .relative-posts {
  3. background: #fff;
  4. margin: 30px 8px;
  5. padding: 32px;
  6. line-height: 30px;
  7. }
  8.  
  9. .relative-posts h3 {
  10. border-bottom: 1px solid rgba(0, 0, 0, 0.12);
  11. padding-bottom: 15px;
  12. margin: 0;
  13. }
  14. </style>
  15. <script type="text/javascript">
  16. $(function () {
  17. var bloggerUrl = 'https://girlwebdeveloper2.blogspot.com/';
  18. var relativePosts = {};
  19. var relativePostCount = 5;
  20. function displayRealativePosts() {
  21. var relativePostArray = Object.values(relativePosts);
  22. var displayPosts = [];
  23. if (relativePostArray.length > relativePostCount) {
  24. var displayIndexes = [];
  25. while (displayIndexes.length < relativePostCount) {
  26. var index = Math.floor((relativePostArray.length - 1) * Math.random());
  27. if (!displayIndexes.includes(index)) {
  28. displayIndexes.push(index);
  29. displayIndexes.sort();
  30. }
  31. }
  32. for (var i = 0; i < displayIndexes.length; i++) {
  33. displayPosts.push(relativePostArray[displayIndexes[i]]);
  34. }
  35. } else {
  36. displayPosts = relativePostArray;
  37. }
  38. if (displayPosts.length) {
  39. var relativeHtml = '<h3>延伸閱讀</h3><ul>';
  40. for (var i = 0; i < displayPosts.length; i++) {
  41. displayPosts[i]
  42. relativeHtml += '<li><a href="' + displayPosts[i].url + '">' + displayPosts[i].title + '</a></li>';
  43. }
  44. relativeHtml += '</ul>';
  45. if ($('.relative-posts').length) {
  46. $('.relative-posts').html(relativeHtml);
  47. } else {
  48. $('.item-view .post-outer').after($('<div>').addClass('relative-posts').html(relativeHtml));
  49. }
  50. }
  51. }
  52. $('.item-view .post-labels a').each(function(index, tag) {
  53. $.ajax({
  54. url: bloggerUrl + 'feeds/posts/default/-/' + $(tag).text() + '?alt=json',
  55. success: function(res) {
  56. $.each(res.feed.entry, function(index2, entry) {
  57. var url = '';
  58. $.each(entry.link, function(index3, link) {
  59. if (link.rel == 'alternate') {
  60. url = link.href;
  61. }
  62. });
  63. if (entry.title.$t != $('.item-view .post-wrapper .post-title').text().replace(/\n/g, '')) {
  64. relativePosts[entry.id.$t] = {
  65. title: entry.title.$t,
  66. url: url,
  67. };
  68. }
  69. });
  70. displayRealativePosts();
  71. }
  72. });
  73. });
  74. });
  75. </script>
說明:
  1. 程式有用到 jQuery,如果網誌沒有載入過的還需另外載入。
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  2. 有一個重點一定要注意,就是第 17 行的 bloggerUrl 變數要改成自己網誌的網址,最後要有斜線"/"。
  3. 第 19 行的 relativePostCount 是最多顯示多少篇文章。
  4. 如果不想跟我一樣叫延伸閱讀,可以在第 39 行調整。
  5. 第 1~14 行是 CSS,微調一下顏色和間距。

留言

  1. 您好,想請教版大
    文內Code碼的背景也是用程式碼帶入的嗎?
    還是他跟Blogger文章編輯器的引用有關呢?
    試過Blogger的引用還滿簡單的,
    很想改成像版大這樣的形式,或是至少可以去掉雙引號的符號XD

    回覆刪除

張貼留言