熊掌号已经出来好久了,一直没有时间折腾,这段时间闲下来了便将熊掌号页面改造给做了。代码大多来自 泪雪博客 ,当然网上也有很多其他的博主分享的代码,大家也可以搜搜看看。在进行页面改造前建议大家先看看 官方文档 ,这里我就不多加赘述了,直接开始我的改造历程(由于博客是自适应的,下面熊掌号的页面改造也是选择的html5方式)。

header.php文件修改

在主题目录下的 header.php 文件的合适位置添加下面这段代码:

<!-- 百度熊掌号页面改造 -->
<link rel="canonical" href="<?php the_permalink() ?>"/>
<script src="//msite.baidu.com/sdk/c.js?appid=你的熊掌号ID"></script>
<?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>';
	}
?>

这段代码主要是为网页添加“canonical标签”、“熊掌号ID声明”以及“JSON_LD数据”,其中JSON_LD数据调用的两个变量 ‘.fanly_post_imgs().’ 与 ‘.fanly_excerpt().’ 我们需要在后面通过函数获取。

function.php文件修改

添加如下代码至你主题的 function.php 文件中:

//百度熊掌号页面改造
//获取文章/页面摘要
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 2017/11/23
function fanly_post_imgs(){
	global $post;
	$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];
	}else{
		if( $values = get_post_custom_values("thumb") ) {	//输出自定义域图片地址
			$values = get_post_custom_values("thumb");
			$src = $values [0];
		} elseif( has_post_thumbnail() ){	//如果有特色缩略图,则输出缩略图地址
			$thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
			$src = $thumbnail_src [0];
		} else {	//文章中获取
			if($n > 0){ // 提取首图
				$src = $strResult[1][0];
			} 
		}
	}
	return $src;
}

这段代码是通过两个自定义函数获取分享文章或页面的描述及图像的,也就是上面JSON_LD中的两个变量 ‘.fanly_post_imgs().’ 与 ‘.fanly_excerpt().’ 。

single.php文件修改

由于一般我们希望熊掌号展现的内内容都是文章,所以我只在文章页面添加了关注功能,在 single.php 文件中添加如下代码即可实现:

<script>cambrian.render('head')</script>
<script>cambrian.render('body')</script>
<script>cambrian.render('tail')</script>

顶部bar、段落间bar及底部bar的前端显示效果如下,大家可根据自己喜好选用。三种bar最多只能选用两个,后期百度会查。

在线校验

修改完上述内容后,大家可以选择具体一篇文章获取 HTML 源码,通过百度的在线校验工具进行校验,校验成功后会出现如下界面。