解决 WordPress 主题结构化改造熊掌号获取不到通过外链设置题图地址的方法

这篇文章针对有使用外链设置题图功能,改造后获取不到题图地址的主题

本站使用的 C7V5 主题就有使用外链设置题图的功能,而且我也改造熊掌号了,但是通过外链设置的题图居然获取不到

之前的解决方式是通过后台上传题图,其他的直接上传服务器,然后使用 COS 插件去同步到腾讯云存储

后台上传图片,是占用 ID 的,WordPress 的这一点槽点十足

看了一下之前的代码,它是优先获取文章中的三张图,否则依次获取自定义图片、特色图、文章首图

按理说代码逻辑是对的,没有任何问题,就是拿不到图

来看一下之前的改造代码

if( $values = get_post_custom_values("thumb") ) { //输出自定义域图片地址
    $values = get_post_custom_values("thumb");
    $src = $values [0];
}

打印这个$values肯定是为空的,所以肯定获取不到

看一下get_post_custom_values()这个函数,用于返回文章的自定义字段值的一个函数

因为自定义字段分为,键值 keys 和自定义字段值 values ,有些时候我们需要单独获取这两个值

所以 WordPress 中就派生出了get_post_custom_values()get_post_custom_keys()两个函数

get_post_custom_values()用于获取当前文章的指定自定义字段的值,并以数组形式返回

get_post_custom_keys()用于获取当前文章所有的自定义字段的键值

了解了函数是什么作用,就来找一下这个键值,或者去问主题的作者

footer.php文件中底部加上以下测试代码,打印一下自定义字段看一下

<?php var_dump(get_post_custom_keys()); ?>

刷新页面,看最底下就有类似于下面这样,然后删掉上面的代码

array(4) {
    [0]=> string(10) "_edit_last"
    [1]=> string(5) "cover"
    [2]=> string(12) "Fanly_Submit"
    [3]=> string(10) "_edit_lock"
}

很明显是第二个 cover 啊,拿过去复制粘贴,测试,成功了就是这个 😆

就是替换掉上面代码中的 thumb

if( $values = get_post_custom_values("cover") ) { //输出自定义域图片地址
    $values = get_post_custom_values("cover");
    $src = $values [0];
}

还有一种,没有题图,我设置了默认图片再加上一个判断

// 没有封面图获取默认图片
if (empty($src)) {
    $src = c7v5_get_post_cover();
}

这个就是要主题函数支持了,具体的看你的主题吧

17 条评论

发表评论

*

  • 熊掌号还要弄代码,看见代码就头晕,看来还是不用开通了,开通了也不会用。

  • 懂得方法之后,这种问题都是小问题,特别是需要弄懂获取自定义字段的相关函数就OK了

  • get_post_custom_values取的是自定义字段啊。这个“自定义”显然是主题定的,存的名跟取的名不一致,还能怪wp本身吗?

    • @大致 存的名和取的名不一样,全网都是thumb代码,用的主题不一样当然不一样咯,我说的就是解决主题不一样的方法,根据主题定

      • @沈唁 要是没有熊掌号这种东西,当然随便写。可现在既然是百度说的算,那主题就得跟着它定得走啊。

        • @大致 熊掌号是熊掌号,wp是wp,怎么扯到一起的?还要wp听百度的?而且这个函数获取的就是wp默认的,跟着主题走的。而不是跟着百度走,代码也不是百度写的

      • @沈唁 get_post_custom_values是WP的,但是“cover”和“thumb”不是,对吧?
        我又看了一遍。才发现跟熊掌号没关系,跟WP也没关系。对不起。
        “cover”是主题作者写的,“thumb”是cos插件要的,两个地方改哪头都可以。cos插件应该把这个地方做成可配置项。

        • @大致 thumb怎么又成cos插件的了。。。你自己打印一下你主题里面的,看看是什么?这块的值是按照主题来的

      • @沈唁 我的主题是我自己写的,没有。我也查了官方主题twentyseventeen,根本没有外链图片这回事。一个很简单的特征,wordpress自动存的post_meta,都是下划线开头的。老外根本就不习惯用图床,thumbnail相关的一系列函数才是原生的WP的用法。默认的wp存的是_thumbnail_id,也就是你诟病的那个自增长的图片号。
        冷静冷静。好好想一下WP、主题、插件之间的关系。
        搜索一下你的主题,这个“cover”字段是在你的主题里的某个地方,用add_post_meta之类的函数存进去的。
        或者是你的其他什么插件干的,WP本体绝对没存过”cover”这个post_meta。
        问题很简单,一个地方存了“cover”,另一个地方要取“thumb”,我要说的是,这两个地方都不是wordpress本体,我认为改存的地方更合适一些,就这样。

  • 这显然是主题作者的锅。其实有种从content里用正则表达式直接取第一张图的办法。