

























在实际使用Syndication Links插件的过程中,如果经常发布到一些插件默认不支持的网站,就会遇到无法显示对应站点图标和名称的问题。本文记录了如何通过不直接修改插件源文件的方式,为该插件增加新的站点映射与图标,以避免更新时丢失修改。
Syndication Links插件在includes/class-syn-link-domain-icon-map.php中维护了一个私有静态数组$map,用于将域名映射到对应的图标名。例如:
private static $map = array(
'twitter.com' => 'twitter',
'facebook.com' => 'facebook',
// ...
);
当页面需要显示某个链接的图标时,插件会:
$map数组是否有该域名的映射svgs目录中加载对应的SVG图标文件includes/simple-icons.php的simpleicons_syn_get_names()函数获取该映射名对应的显示名称如果$map中没有对应域名,插件会尝试根据域名的中间部分去找图标文件;如果仍找不到,就会显示一个默认的website图标。
域名映射表
在$map中添加新域名及其图标名,例如:
'sanguok.com' => 'wordpress',
'chatan.cc' => 'iceshrimp',
'library.chatan.cc' => 'bookwyrm',
图标名称映射
在includes/simple-icons.php中的simpleicons_syn_get_names()函数中,添加新的图标名与显示名称,例如:
'bookwyrm' => 'Bookwyrm',
SVG图标文件
在插件的svgs目录下放置与图标名一致的.svg文件,例如bookwyrm.svg。
文件内容需要是有效的SVG代码,来源可以是自己绘制的,或从SVG Repo等网站下载并调整。
如果直接编辑插件的源文件,在更新插件后修改会丢失。 解决办法是使用Code Snippets插件,在运行时通过钩子动态扩展映射和图标名。
<?php
// 扩展域名映射
add_filter('syn_link_mapping', function($mapped, $url) {
$custom_map = array(
'sanguok.com' => 'wordpress',
'chatan.cc' => 'iceshrimp',
'library.chatan.cc' => 'bookwyrm',
);
$host = str_replace('www.', '', parse_url($url, PHP_URL_HOST));
if (isset($custom_map[$host])) {
return $custom_map[$host];
}
return $mapped;
}, 10, 2);
// 扩展图标名称映射
add_filter('simpleicons_syn_get_names', function($icons) {
$icons['bookwyrm'] = 'Bookwyrm';
return $icons;
});
说明:
syn_link_mapping过滤器允许在插件完成映射后,动态修改映射结果simpleicons_syn_get_names是一个我们假设添加的过滤器,如果插件没有,需要通过其他方式覆盖函数返回值(可能需要额外包装)
svgs目录下,否则插件找不到。svgs目录里的文件也可能被覆盖或删除,建议在更新前备份。svgs目录中此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。