泪雪博客接入百度熊掌号(原百度官方号)已经有一段时间了,虽然目前暂时还无法统计实际的效果,不过但从百度站长平台熊掌号的数据分析中来看还是不错的,前面也已经分享过“WordPress 百度熊掌号快速开发改造教程”,今天就把其中关于熊掌号接入 Json_LD 数据的代码分享出来给大家。

当然如果你对代码一窍不通或者没有心思去折腾,那么子凡还提供了 WordPress 熊掌号接入改造插件:Fanly XZH ,可以快速无需修改代码即可实现 MIP 页面、自适应 H5 页面对熊掌号的支持和改造。

WordPress 百度熊掌号 Json_LD 数据

首先来分享一个最简单的一段 Json_LD 数据代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//获取文章/页面摘要
function fanly_excerpt($len=220){
	if ( is_single() || is_page() ){
		global $post;
		if ($post->post_excerpt) {
			$excerpt  = $post->post_excerpt;
		} else {
			if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
				$post_content = $result['1'];
			} else {
				$post_content_r = explode("\n",trim(strip_tags($post->post_content)));
				$post_content = $post_content_r['0'];
			}
			$excerpt = preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,0}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s','$1',$post_content);
		}
		return str_replace(array("\r\n", "\r", "\n"), "", $excerpt);
	}
}
1
2
3
4
5
6
7
8
9
<script type="application/ld+json">{
	"@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld",
	"@id": "<?php the_permalink(); ?>",
 	"appid": "这里请填写熊掌号 ID",
	"title": "<?php the_title(); ?>",
	"images": ["<?php echo catch_that_image() ?>"],
	"description": "<?php echo fanly_excerpt()?>",
	"pubDate": "<?php echo get_the_time('Y-m-d\TH:i:s')?>",
}</script>

其中子凡自定义了一个文章或页面的摘要函数,如果没有设置文章摘要将会自动截取文章第一段的指定长度作为摘要。

下面我们就继续来加强这段代码,百度熊掌号在 Json_LD 数据里面是支持单张缩略图和三张缩略图的样式,当然对于子凡这种力求极致的人来说,不完善这个可能晚上都不能好好睡觉的人必须做到,子凡就直接在完整的一个推荐代码中给大家贴出来吧。

WordPress 百度熊掌号 Json_LD 数据完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//获取文章/页面摘要
function fanly_excerpt($len=220){
	if ( is_single() || is_page() ){
		global $post;
		if ($post->post_excerpt) {
			$excerpt  = $post->post_excerpt;
		} else {
			if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
				$post_content = $result['1'];
			} else {
				$post_content_r = explode("\n",trim(strip_tags($post->post_content)));
				$post_content = $post_content_r['0'];
			}
			$excerpt = preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,0}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s','$1',$post_content);
		}
		return str_replace(array("\r\n", "\r", "\n"), "", $excerpt);
	}
}
 
//获取文章中的图 last update 2018/01/22
function fanly_post_imgs(){
	global $post;
	$src = '';
	$content = $post->post_content;  
	preg_match_all('/<img .*?src=[\"|\'](.+?)[\"|\'].*?>/', $content, $strResult, PREG_PATTERN_ORDER);  
	$n = count($strResult[1]);  
	if($n >= 3){
		$src = $strResult[1][0].'","'.$strResult[1][1].'","'.$strResult[1][2];
	}elseif($n >= 1){
		$src = $strResult[1][0];
	}
	return $src;
}

子凡建议大家把以上两段代码添加到你需要接入熊掌号的主题的 functions.php 中,然后继续:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if(is_single()){
	echo '<script type="application/ld+json">{
	"@context": "https://ziyuan.baidu.com/contexts/cambrian.jsonld",
	"@id": "'.get_the_permalink().'",
 	"appid": "这里请填写熊掌号 ID",
	"title": "'.get_the_title().'",
	"images": ["'.fanly_post_imgs().'"],
	"description": "'.fanly_excerpt().'",
	"pubDate": "'.get_the_time('Y-m-d\TH:i:s').'"
}</script>
';}
?>

最后大家就可以把以上这段代码添加在你的 WordPress 主题的 header.php 的合适的位置,以上代码子凡还做了一个 if 判断,只让该段代码在文章中输出。

写在最后

关于 WordPress 接入百度熊掌号的 Json_LD 数据代码改造就给大家分享到这里了吧,最后如果大家的 WordPress 站点成功接入熊掌号,不妨在试试子凡提供的《WordPress 百度熊掌号数据提交插件》,这个插件或许能够助力你更快的实现官方好数据提交和原创推送。

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/wordpress-json-ld.html

发表评论

  1. 影子
    1楼
    影子 2个月前 (04-02)

    WordPress 百度熊掌号页面改造插件:Fanly XZH V1.5 是不是已经支持“搜索结果出图”功能了

    • 张子凡
      回复
      张子凡 2个月前 (04-03)
      回复 @影子 :已经支持的,不用担心。
  2. 旺德佑
    2楼
    旺德佑 2个月前 (03-26)

    按https://zhangzifan.com/wordpress-json-ld.html 的方法,添加了function和ld+json 可是不能通过熊掌号的在线校验,怎么回事呢?

    • 张子凡
      回复
      张子凡 2个月前 (03-26)
      回复 @旺德佑 :改造只对文章和页面有效,其它页面改造没有意义。
  3. 好奇看
    3楼
    好奇看 2个月前 (03-26)

    还有个问题,我目前图片只能获取到设置为特色图的图片,其他图片无法获取,请问可能是什么情况,文章里有放了3张图片的。谢谢

    • 张子凡
      回复
      张子凡 2个月前 (03-26)
      回复 @好奇看 :请将我提供的代码完整的使用,例如获取缩略图的fanly_post_imgs函数总得有吧,你提供的错误代码提示就是这个问题。
      • 好奇看
        回复
        好奇看 2个月前 (03-26)
        回复 @张子凡 :加了这个属性会白屏错误,if(is_single()){ echo '。去除这个属性就正常了。然后其他代码都按照方法加入了。但还是只能获取到特色图的图片,其他图片无法获取。
        • 张子凡
          回复
          张子凡 2个月前 (03-27)
          回复 @好奇看 :有时间我在研究研究,可能是我的php语法不专业,哈哈哈,你这边是什么一个环境和WordPress版本呢,方便提供一下我参考没?
          • 好奇看
            回复
            好奇看 2个月前 (03-28)
            回复 @张子凡 :wp是最新版的。模板是KRATOS模板,这里是下载地址https://www.vtrois.com/theme-kratos.html
  4. 好奇看
    4楼
    好奇看 2个月前 (03-23)

    增加了这个代码就白屏出错,去除就正常,并通过百度工具核对<?php
    if(is_single()){
    echo '

    请问可能是什么原因?请指点

    • 张子凡
      回复
      张子凡 2个月前 (03-25)
      回复 @好奇看 :白屏?是页面出现空白还是什么呢?是否有做过修改呢
      • 好奇看
        回复
        好奇看 2个月前 (03-26)
        回复 @张子凡 :没有修改,我去除if(is_single()){ echo '这个属性之后就正常了,也通过官网检查了。目前测试就是图片无法加载,其他都正常。可能和我主题有关系。
  5. summer
    5楼
    summer 3个月前 (03-08)

    请问使用了你的 Fanly Submit 插件

    还需要在页面添加 添加canonical标签、JSON_LD数据 代码吗?

    • 张子凡
      回复
      张子凡 3个月前 (03-08)
      回复 @summer :Fanly Submit只是推送插件,并非改造插件,所以需要你自行开发接入熊掌号结构化数据。
  6. 不良人
    6楼
    不良人 4个月前 (01-18)

    加入function.php后提示syntax error, unexpected ‘function’。PHP版本7.0

    • 张子凡
      回复
      张子凡 4个月前 (01-18)
      回复 @不良人 :那就是你添加错误了。
  7. MS酋长
    7楼
    MS酋长 5个月前 (12-15)

    请问博主,是只需要在移动主题中添加代码?还是PC主题和移动主题都要添加?

    • 张子凡
      回复
      张子凡 5个月前 (12-16)
      回复 @MS酋长 :你使用的移动端添加就可以了
  8. 城市暗角
    8楼
    城市暗角 6个月前 (12-05)

    博主你好,”pubDate”: “‘.get_the_time(‘Y-m-d\TH:i:s’).'”这句在bbspress帖子页面不能获取时间,能有解决方法吗?其它页面都正常了,麻烦你帮忙看一下啦

    • 张子凡
      回复
      张子凡 6个月前 (12-05)
      回复 @城市暗角 :我未使用bbspress,所以我这里也没法测试
  9. 笛声
    9楼
    笛声 6个月前 (12-02)

    添加熊掌号ID声明

    <script src="//msite.baidu.com/sdk/c.js?appid=158
    我不想让这个在主页出现,只出现在文章页面?要怎么实现?谢谢大神

    • 张子凡
      回复
      张子凡 6个月前 (12-03)
      回复 @笛声 :使用WordPress的is_single做if判断即可
  10. 99八十一
    10楼
    99八十一 6个月前 (12-01)

    我连百度站长都没玩呢,又出来个熊掌,落伍了!!!

    • 张子凡
      回复
      张子凡 6个月前 (12-01)
      回复 @99八十一 :你已经相当的落伍了
  11. 先锋资源
    11楼
    先锋资源 6个月前 (11-28)

    请教下博主,我在header.php页面添加
    <?php
    if(is_single()){
    echo '{
    “@context”: “https://ziyuan.baidu.com/contexts/cambrian.jsonld”,
    “@id”: “‘.get_the_permalink().'”,
    “appid”: “这里请填写熊掌号ID”,
    “title”: “‘.get_the_title().'”,
    “images”: [“‘.fanly_post_imgs().'”],
    “description”: “‘.fanly_excerpt().'”,
    “pubDate”: “‘.get_the_time(‘Y-m-d\TH:i:s’).'”
    }
    ‘;}
    ?>

    后网站就是白页了 是什么原因呢?

    • 张子凡
      回复
      张子凡 6个月前 (11-28)
      回复 @先锋资源 :只是这一段代码是不行的,你看我页面文章中也不仅仅是这一段代码吧,如果不会代码折腾改造的可以考虑使用 Fanly XZH 熊掌号改造插件
      • 先锋资源
        回复
        先锋资源 6个月前 (11-28)
        回复 @张子凡 :其他代码我都加入了 是用您的插件 就是这段代码不能加 搞不懂什么原因 我是php5.4不知道是否跟此有关
        • 张子凡
          回复
          张子凡 6个月前 (11-28)
          回复 @先锋资源 :关于代码具体看是什么错误才行,还有我的插件也不只一个,代码目前应该是支持php5.4的
    • 爱折腾
      回复
      爱折腾 2个月前 (03-20)
      回复 @先锋资源 :把这个去除就能成功: <?php if(is_single()){ echo '
  12. 灰常记忆
    12楼
    灰常记忆 6个月前 (11-26)

    感谢,我来试试看。

  13. 笛声
    13楼
    笛声 6个月前 (11-17)

    获取摘要字数好像有问题,我的获取到140字的摘要。。官方要求120字以内。

    • 张子凡
      回复
      张子凡 6个月前 (11-17)
      回复 @笛声 :根据需要修改长度数字就可以了
  14. 米虫
    14楼
    米虫 6个月前 (11-15)

    新站抱着试一试的态度申请了熊掌号,没想到居然通过了,这篇文章一下子就解决了我的燃眉之急,万分感谢大佬提供的技术分享~再次感谢~~~~

    • 张子凡
      回复
      张子凡 6个月前 (11-15)
      回复 @米虫 :熊掌号现在基本申请就是可以通过的
  15. 米虫
    15楼
    米虫 7个月前 (11-09)

    很强大,不过目前只能看看~~~

  16. 笛声
    16楼
    笛声 7个月前 (11-07)

    appid: 必选字段, 熊掌号ID
    这个字段你上面没写?不需要吗

    • 张子凡
      回复
      张子凡 7个月前 (11-08)
      回复 @笛声 :不好意思之前没有及时修改过来,刚刚已经改正为熊掌号最新的接口信息。
  17. aptfund
    17楼
    aptfund 7个月前 (11-03)

    您好,博主能否写一篇ghost博客程序实现Json_LD的教程,配置百度熊掌号的教程。

    • 张子凡
      回复
      张子凡 7个月前 (11-03)
      回复 @aptfund :暂时没有使用过ghost程序,所以目前可能暂时没办法写这个教程了
  18. 站盟网
    18楼
    站盟网 8个月前 (09-12)

    第四个代码处掉了一个逗号。
    “pubDate”: “‘.get_the_time(‘Y-m-d\TH:i:s’).'”

    • 张子凡
      回复
      张子凡 8个月前 (09-12)
      回复 @站盟网 :这个不是掉了,是放在最后一个项目的前面了而已