准备工作
确保已安装 WordPress 并启用了适合的主题:以我的主题为例,适用于大多数 WordPress 主题。
获取 Memos 的 RSS 订阅地址:比如我的链接为 https://memos.duanxiansen.com/u/1/rss.xml,根据你的 Memos 实际 RSS 链接替换。
编写函数获取 Memos 最新动态
需要编写一个函数,使用 WordPress 的 wp_remote_get() 函数从 RSS 链接获取数据,并解析出最新的一条动态。
首先,打开 WordPress 主题目录中的 functions.php
文件,添加以下代码:
// 获取 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
文件,在首页判断条件下调用定义的短代码。
- 打开主题目录下的
header.php
文件,找到适当位置(如头部模板部分)插入以下代码:<!-- 在首页显示最新的 Memos 动态 --> <?php if ( is_home() || is_front_page() ) : ?> <div class="memos-latest"> <?php echo do_shortcode('[latest_memo]'); ?> </div> <?php endif; ?>
is_home()
和is_front_page()
:这两个函数确保只有在首页显示动态,而其他页面不会显示。is_home()
用于判断博客文章列表页,is_front_page()
用于判断自定义的前端首页。
样式调整(居中显示)
将以下 CSS 代码添加到你的主题 style.css
文件中:
.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页面,继续完善吧。
keyle ( VIP 1 )
中国香港PHP写的head加载,会导致网页渲染等待吧 ?这个head渲染完毕(memos 数据拉取,节点渲染),才会渲染后续的html ?这个需要确认下
You&FM ( VIP 6 )
中国北京开始搞专业了,厉害
林羽凡 ( VIP 6 )
中国甘肃妙啊,你也开始折腾代码了。
粽叶加米 ( VIP 5 )
英国效果不错哟。
大峰 ( VIP 6 )
中国江苏折腾快乐
段先森
中国甘肃@大峰 必须快了,哈哈
阿杰 Jack ( VIP 1 )
加拿大真不错,想弄,但是不知道怎么去按自己的想法调整,害怕玩砸了
段先森
中国甘肃@阿杰 Jack 那就先想好自己的思路,一步到位,嘿嘿
网友小宋 ( VIP 6 )
中国河南666 优秀
段先森
中国甘肃@网友小宋 哈哈
空空裤兜 ( VIP 1 )
中国甘肃看了看,感觉好高端。我的Memos都是自言自语
段先森
中国甘肃@空空裤兜 我的也是,大家的应该都是呢,哈哈
Kevin's ( VIP 2 )
中国台湾留个脚印,回头需要时再来你这儿学习
段先森
中国甘肃@Kevin's 哈哈,这个可以折腾
acevs ( VIP 2 )
伊朗厉害~
段先森
中国甘肃@acevs 嘿嘿
皇家元林 ( VIP 2 )
中国安徽可以再改改,多显示几条,或者以幻灯片的形式切换显示。还有这个背景,在暗黑模式下,异常的辣眼睛。
段先森
中国甘肃@皇家元林 好建议,我去研究研究
Mr.He ( VIP 2 )
中国安徽全是技术活,慕了.
段先森
中国甘肃@Mr.He 哈哈,折腾起来
obaby ( VIP 4 )
中国山东功能越来越多啊
段先森
中国甘肃@obaby 哈哈,一直瞎折腾