Open FaceChan opened 1 year ago
@chatgtp4
你的插件代码看起来已经很接近你想要的功能了。但是,从你的描述来看,你在索引页面无法成功替换头图 URL。这可能是因为在 Typecho 的索引页面中,文章的自定义字段(如头图URL)可能并没有被预加载,所以你在处理索引页面时无法访问这些字段。
你可以尝试在你的主题的索引页面模板中,使用 fields()
方法来预加载文章的自定义字段。以下是一个示例代码:
// 在你的主题的 index.php 文件中
$posts = $this->widget('Widget_Contents_Post_Recent');
while($posts->next()){
$posts->fields(); // 预加载自定义字段
// 然后你可以像在文章页面一样访问自定义字段
echo $posts->fields->banner;
}
然后你可以在你的插件中,使用类似的方法来处理索引页面的文章:
public static function replace_content(Widget_Archive $archive)
{
// ...
foreach($archive->stack as $index=>$con){
// ...
// 替换头图内容
if(array_key_exists('fields', $con) && array_key_exists('banner', $con['fields'])){
$archive->stack[$index]['fields']['banner'] = preg_replace($to_replace, $replace_to, $con['fields']['banner']);
$archive->stack[$index]['banner'] = $archive->stack[$index]['fields']['banner'];
}
}
// ...
}
这样应该可以解决你的问题。如果还有问题,可能需要更详细地调试你的代码和环境。
1. 该问题的重现步骤是什么?
博客使用CDN分流,想通过插件的方式更换头图url为CDN地址
2. 你期待的结果是什么?实际看到的又是什么?
文章可以实现替换效果,但头图无法注入。
尝试直接给$archive赋值,在单个文章页面成功,但在索引页面返回的依然是空值。
3. 问题出现的环境