WordPress首页调用typecho方法!

[upl-image-preview url=https://s.rmimg.com/2024-10-28/1730096138-265840-image.png]

前段时间花了那么多的时间折腾了《WordPress首页调用memos方法!》后,怎么又来折腾Wordpress首页调用typecho呢!原因有这样的两点,首先memos的作者对memos的更新真的是太随意了,每次版本的升级,你会想不到他会把什么功能给删掉、或是更想不到把数据库的结构给改了、还有就是随意改变API的接口。也正因为他的随意,一部分人还保持在低版本来使用,另外一部分人就是直接弃用了,所以我想着说不定哪一天也会弃用memos。另外的一个原因就是除了老张博客之外,我还有一个老张随笔,一直保持每日一更新,字数都是在二百字,就像朋友圈一样,最初是用typecho程序,后来改用memos,目前那个typecho上面还放着一千两百多篇随笔。我想与其这样牵强的用着memos,不如退回来用typecho算了。

有了上面的想法后,就想着把我的wordpress和typecho来个“整合”,在wordpress调用typecho的首篇文章。有了上一次的折腾,这次算是轻车熟路了,前前后后的折腾有两个小时。通过这次的折腾,让我对AI又有了新的认识,上次我认为是“豆包最聪明”,结果经过这次的“折腾”发现把相同的问题多次的提问同一个AI,每次他给出的答案也是不一样的。单单就响应速度来说,官方的GPT最为快,所以这次代码就是借助官方GPT来完成的。话不多说,直接上代码吧!

**忘了一个重要的事: typecho本身没有提供API接口服务,这里我找到一款插件,Restful,安装后直接启用就行,因为我是直接调用文章的,其他的API接口就被我给关了!**

1.把下面的代码插入到主题文件的index.php合适位置。

``` <?php $data = fetch_typecho_data(); if ($data): ?> <div class="latest-update" style="background-color: #f8f8f8;"> <div class="latest-update-header"> <h2>最新动态</h2> <span class="latest-update-time"><?php echo esc_html($data['time_content']); ?></span> </div> <div class="latest-update-divider"></div> <div class="latest-update-content"><?php echo esc_html($data['content']); ?></div> <div class="latest-update-images"> <?php foreach ($data['image_content'] as $img_url): ?> <a href="<?php echo esc_url($img_url); ?>" data-lightbox="latest-update-gallery"> <img src="<?php echo esc_url($img_url); ?>" alt="Image"> </a> <?php endforeach; ?> </div> <div class="latest-update-footer"> <span class="latest-update-tag"><?php echo esc_html($data['tag_content']); ?></span> <a class="latest-update-link" href="<?php echo esc_url($data['link_content']); ?>" target="_blank">查看全文</a> </div> </div> <?php endif; ?> <script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css"> ```

2.把CSS样式代码放置到主题CSS定义设置里,当然也可以直接放到style.css中。

``` /* 首页调用typecho样式 */ .latest-update { width: calc(100% - 40px); /* 设置宽度为100%减去40px,确保有左右边距 */ background-color: #f8f8f8 ; /* 强制设置背景颜色为浅灰色 */ border: 1px solid #ddd; /* 添加1像素的灰色边框 */ border-radius: 10px; /* 圆角边框,半径为10px */ padding: 20px 20px 10px 20px; /* 内边距,上下10px,左右20px */ margin: 20px 0; /* 外边距,上下20px,左右0 */ text-align: left; /* 文本左对齐 */ margin-top: -10px; /* 减少与顶部的距离为0 */ margin-bottom: 30px; /* 增加与文章列表的距离为40px */ margin-right: 20px; /* 设置右边距为20px */ }

.latest-update-header {
display: flex; /* 使用弹性盒模型布局 /
justify-content: space-between; /
头部元素左右分散排列 /
align-items: center; /
垂直居中对齐 /
margin-bottom: 10px; /
头部与下方内容的外边距为10px */
}

.latest-update h2 {
font-size: 15px; /* 标题字体大小为15px /
margin: 0; /
去除默认外边距 /
padding-left: 0px; /
左边填充为0 */
}

.latest-update-time {
font-size: 14px; /* 时间字体大小为14px /
color: #666; /
时间文本颜色为中灰色 /
margin-right: 0px; /
右边距为0 */
}

.latest-update-divider {
border-bottom: 1px solid #333; /* 添加底部边框,颜色为深灰色 /
margin: 10px 0; /
上下外边距为10px */
}

.latest-update-content {
text-align: left; /* 内容文本左对齐 /
line-height: 1.5; /
行高设置为1.5倍 /
margin: 10px 0; /
上下外边距为10px */
}

.latest-update-images {
text-align: left; /* 图片区域文本左对齐 /
margin: 10px 0; /
上下外边距为10px */
}

.latest-update-images img {
width: 100px; /* 图片宽度为80px /
height: 75px; /
图片高度为80px /
object-fit: cover; /
图片覆盖方式,保持比例并裁剪 /
border-radius: 8px; /
图片圆角,半径为8px /
box-shadow: 0 4px 10px rgba(0, 0, 0, 1); /
添加阴影效果 /
margin: 3px; /
图片外边距为5px /
transition: transform 0.3s, opacity 0.3s; /
添加平滑过渡效果 */
}

.latest-update-images img:hover {
transform: scale(1.1); /* 鼠标悬停时放大10% /
opacity: 0.9; /
鼠标悬停时透明度降低到0.9 */
}

.latest-update-footer {
display: flex; /* 使用弹性盒模型布局 /
justify-content: space-between; /
底部元素左右分散排列 /
align-items: center; /
垂直居中对齐 /
margin-top: 10px; /
底部与上方内容的外边距为10px /
padding-top: 10px; /
上内边距为10px /
border-top: 1px solid #ddd; /
添加顶部边框,颜色为浅灰色 */
}

.latest-update-tag {
background-color: #e0e0e0; /* 标签背景颜色为淡灰色 /
border-radius: 5px; /
标签圆角,半径为5px /
padding: 5px 10px; /
内边距,上下5px,左右10px /
font-size: 14px; /
标签字体大小为14px */
}

.latest-update-link {
text-decoration: none; /* 去除链接的下划线 /
color: #0073aa; /
设置链接颜色为蓝色 /
font-size: 14px; /
链接字体大小为14px /
}
/
首面调用typecho结束 */
```

3.把下面代码插入到主题functions.php文件中。

``` //-------首页调用typehco代码-----开始 function fetch_typecho_data() { $api_url = "https://suibi.zhangbo.net/api/posts?pageSize=1"; $response = wp_remote_get($api_url); if (is_wp_error($response)) { return; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true);
if ($data['status'] !== 'success' || empty($data['data']['dataSet'])) {
    return;
}

$post = $data['data']['dataSet'][0];

// 1. 链接内容
$link_content = "https://suibi.zhangbo.net/archives/" . $post['cid'] . ".html";

// 2. 标签内容
$tag_content = "#" . $post['categories'][0]['name'];

// 3. 时间内容
$created_time = (int)$post['created'];
$current_time = time();
$time_diff = $current_time - $created_time;

if ($time_diff &lt; 3600) {
    $time_content = floor($time_diff / 60) . "分钟前";
} elseif ($time_diff &lt; 86400) {
    $time_content = floor($time_diff / 3600) . "小时前";
} elseif ($time_diff &lt; 2592000) {
    $time_content = floor($time_diff / 86400) . "天前";
} else {
    $time_content = date("Y年m月d日", $created_time);
}

// 4. 摘要内容
$digest = strip_tags($post['digest'], "");
$content = mb_strlen($digest, 'UTF-8') &lt;= 200 ? $digest : mb_substr($digest, 0, 200, 'UTF-8') . "......";

// 5. 图片内容
preg_match_all('/&lt;img.*?src=["\'](.*?)["\'].*?&gt;/i', $post['digest'], $matches);
$image_content = $matches[1];

return [
    'link_content' =&gt; $link_content,
    'tag_content' =&gt; $tag_content,
    'time_content' =&gt; $time_content,
    'content' =&gt; $content,
    'image_content' =&gt; $image_content
];

}

```

typecho自带API?

@“叫我沈同学”#p131637 不带,漏了,我来改下!博客原文里改过了,这里给忘了改了!


@“叫我沈同学”#p131637 忘了一个重要的事: typecho本身没有提供API接口服务,这里我找到一款插件,Restful,安装后直接启用就行,因为我是直接调用文章的,其他的API接口就被我给关了!

@“老张”#p131641 我都是自己写api接口的,还写了api搜索接口

@“叫我沈同学”#p131718 本来我是想让ai写的,但是找到现成的插件了就没有

@“叫我沈同学”#p131718 话说你的还好分享一下呀

就没有来点图片预览吗?

感谢分享,但是为何会有这样的需求呢:ac01:

有个缺点就是每次打开都要去拉一次,可以考虑缓存下数据,定时拉

@“老张”#p131735 主要是我需要在api返回值里加上指定自定义字段的值,所以只能自己写

@“James”#p131758 上一次写调用memos的时候加了缓存,一会让ai再写写

@“老张”#p131739 恐怕不太行,我很多字段名和传入参数都写死在代码里了,没写后台

@“叫我沈同学”#p131718

这个可以有啊,秀一下秀一下

@“Adapter”#p131795 </s>https://tmp.macapp.org.cn/api/search?keyword=[搜索关键词]<e>

示例: https://tmp.macapp.org.cn/api/search?keyword=app
(接口仅搜索标题)
你在里面看到的version size sizemeta等都是每篇文章自定义字段的值

@“叫我沈同学”#p131780 没事,用这个插件也可以了

为啥要wp显示ty的内容:xhj07:

@“Oops”#p131843 整合嘛,无聊搞着玩呗。

@“老张”#p131850 666 我的ty整的差不多了,就是markdown的短代码有的不咋地