如何在 WordPress 首页显示 Memos 最新动态

折腾46767字数 892阅读模式

准备工作

确保已安装 WordPress 并启用了适合的主题:以我的主题为例,适用于大多数 WordPress 主题。

获取 Memos 的 RSS 订阅地址:比如我的链接为 https://memos.duanxiansen.com/u/1/rss.xml,根据你的 Memos 实际 RSS 链接替换。文章源自三无青年-https://www.duanxiansen.com/2508.html

编写函数获取 Memos 最新动态

需要编写一个函数,使用 WordPress 的 wp_remote_get() 函数从 RSS 链接获取数据,并解析出最新的一条动态。文章源自三无青年-https://www.duanxiansen.com/2508.html

首先,打开 WordPress 主题目录中的 functions.php 文件,添加以下代码:文章源自三无青年-https://www.duanxiansen.com/2508.html

// 获取 Memos 最新一条动态并显示
function display_latest_memo() {
    // 通过 wp_remote_get 获取 RSS 数据
    $response = wp_remote_get('https://memos.duanxiansen.com/u/1/rss.xml'); // 替换为你的 Memos RSS 网址
    if (is_wp_error($response)) {
        return '无法获取 Memos 数据';
    }

    // 获取响应的主体内容
    $body = wp_remote_retrieve_body($response);

    // 将 RSS 数据解析为 XML
    $data = simplexml_load_string($body);

    // 检查返回的数据是否为空
    if (empty($data) || !isset($data->channel->item[0])) {
        return '没有找到最新的 Memos 动态';
    }

    // 获取最新一条动态
    $latest_memo = $data->channel->item[0];

    // 将 RSS 中的时间转换为 WordPress 时区时间
    $rss_date = (string)$latest_memo->pubDate; // 获取 RSS 中的发布时间

    // 创建 DateTime 对象并设置为 RSS 的时间
    $date = new DateTime($rss_date);

    // 将时间转换为 WordPress 时区
    $date->setTimezone(new DateTimeZone(get_option('timezone_string')));

    // 格式化时间为 Y-m-d H:i:s 格式
    $formatted_date = $date->format('Y-m-d H:i:s');

    // 获取描述内容(通常是动态的主要内容)
    $content = (string)$latest_memo->description;

    // 限制字数(例如,显示最多300个字符)
    $excerpt = mb_substr($content, 0, 300);
    if (mb_strlen($content) > 300) {
        $excerpt .= '... <a href="' . esc_url($latest_memo->link) . '" target="_blank">阅读更多</a>'; // 链接到原文
    } else {
        $excerpt .= ' <a href="' . esc_url($latest_memo->link) . '" target="_blank">查看原文</a>'; // 如果字数较短,显示“查看原文”
    }

    // 输出最新动态的内容、时间和链接
    $output = '<div class="latest-memo memos-center">';
    $output .= '<h3>最新动态:</h3>';
    $output .= '<p>' . $excerpt . '</p>';
    $output .= '<p>时间:' . esc_html($formatted_date) . '</p>';
    $output .= '</div>';

    return $output;
}

// 创建一个短代码来显示 Memos 最新动态
add_shortcode('latest_memo', 'display_latest_memo');

在首页显示最新动态

接下来,要让 Memos 最新动态只显示在首页文章的最上方。为此,需要修改 header.php 或者 index.php 文件,在首页判断条件下调用定义的短代码。文章源自三无青年-https://www.duanxiansen.com/2508.html

  1. 打开主题目录下的 header.php 文件,找到适当位置(如头部模板部分)插入以下代码:
    <!-- 在首页显示最新的 Memos 动态 -->
    <?php if ( is_home() || is_front_page() ) : ?>
        <div class="memos-latest">
            <?php echo do_shortcode('[raw][latest断开_memo][/raw]'); ?>
        </div>
    <?php endif; ?>
    
  2. is_home()is_front_page():这两个函数确保只有在首页显示动态,而其他页面不会显示。is_home() 用于判断博客文章列表页,is_front_page() 用于判断自定义的前端首页。

样式调整(居中显示)

将以下 CSS 代码添加到你的主题 style.css 文件中:文章源自三无青年-https://www.duanxiansen.com/2508.html

.memos-latest {
    text-align: center; /* 水平居中内容 */
    margin: 20px auto; /* 上下外边距并居中容器 */
    padding: 10px;
    background-color: #f5f5f5; /* 背景颜色 */
    max-width: 600px; /* 设置容器最大宽度 */
    border-radius: 10px; /* 圆角效果 */
}

.memos-latest h3 {
    font-size: 1.5em;
}

.memos-latest p {
    font-size: 1.2em;
}

.memos-latest a {
    text-decoration: none;
    color: #0073aa; /* 链接颜色 */
}

结尾

就这样吧,不完美的就是不能直接评论,需要点进去到memos页面,继续完善吧。文章源自三无青年-https://www.duanxiansen.com/2508.html

文章源自三无青年-https://www.duanxiansen.com/2508.html文章源自三无青年-https://www.duanxiansen.com/2508.html
历史上的今天
10 月
17
 最后更新:2024-10-30
段先森
  • 本文由 段先森 发表于 2024年10月17日 15:00:31
  • 转载请务必保留本文链接:https://www.duanxiansen.com/2508.html
评论  46  访客  24  作者  22
    • 扶苏
      扶苏 4

      老段,你看看我首页调用的 memos 怎么弄,现在用的 rss 调用。好丑。。

      • Lvtu
        Lvtu 4

        加油折腾。。。 :mrgreen:

        • 白熊阿丸
          白熊阿丸 2

          加油加油!

          • 林羽凡
            林羽凡 6

            你这首页咋又变了,我记得上次来不长这样的啊。

            • klcdm
              klcdm 2

              大伙都在折腾这个啊

              • 演员
                演员 1

                手机端插入代码没对齐

                  • 段先森
                    段先森

                    @ 演员 有点过期咯,我完了再调整下

                  • Dabenshi
                    Dabenshi 2

                    不错不错,值得借鉴 :qiang:

                    • laserqa
                      laserqa 0

                      学习学习,哈哈,感谢

                      • 公子
                        公子 1

                        这种方式还挺好,简洁版“最新唠叨”

                        • Teacher Du
                          Teacher Du 2

                          这是匹配哪个版本?

                          • keyle
                            keyle 3

                            PHP写的head加载,会导致网页渲染等待吧 ?这个head渲染完毕(memos 数据拉取,节点渲染),才会渲染后续的html ?这个需要确认下

                              • 段先森
                                段先森

                                @ keyle 是的呢,一连串不知道咋说了,哈哈

                              • You&FM
                                You&FM 4

                                开始搞专业了,厉害

                                • 林羽凡
                                  林羽凡 6

                                  妙啊,你也开始折腾代码了。

                                  • 粽叶加米
                                    粽叶加米 4

                                    效果不错哟。

                                    • 大峰
                                      大峰 6

                                      折腾快乐 :shengli:

                                        • 段先森
                                          段先森

                                          @ 大峰 必须快了,哈哈

                                          • 大峰
                                            大峰 6

                                            @ 大峰 最新版的memos不行~这个可能跟版本有关系。之前玩的时候好好的,升级后感觉不丝滑了~

                                          • 阿杰 Jack
                                            阿杰 Jack 1

                                            真不错,想弄,但是不知道怎么去按自己的想法调整,害怕玩砸了 :xiaoku:

                                              • 段先森
                                                段先森

                                                @ 阿杰 Jack 那就先想好自己的思路,一步到位,嘿嘿

                                              • 网友小宋
                                                网友小宋 4

                                                666 优秀

                                                • 空空裤兜
                                                  空空裤兜 0

                                                  看了看,感觉好高端。我的Memos都是自言自语

                                                  • Kevin's
                                                    Kevin's 3

                                                    留个脚印,回头需要时再来你这儿学习

                                                    • acevs
                                                      acevs 3

                                                      厉害~

                                                      • 皇家元林
                                                        皇家元林 3

                                                        可以再改改,多显示几条,或者以幻灯片的形式切换显示。还有这个背景,在暗黑模式下,异常的辣眼睛。

                                                        • Mr.He
                                                          Mr.He 3

                                                          全是技术活,慕了.

                                                          • obaby
                                                            obaby 4

                                                            功能越来越多啊

                                                          匿名

                                                          发表评论

                                                          匿名网友
                                                          :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
                                                          确定

                                                          拖动滑块以完成验证