文章形式的实现结构
首先说明一下,此文是一片技术文,你首先具备一定的html基础和一些wordpress主题结构和原理或者你之前自己写过、修改主题或许才能看懂此文。
也许很多同学见过有些同学的博客温养形式有很多,比如,说说、音乐、视频、引用、链接等样,是不是很羡慕。
其实原理很简单,首先要在主题函数中声明有哪些文章样式
诸如我声明了有说说、音乐、视频、引用、链接。则在fuctions.php中添加声明函数
// 添加文章样式
add_theme_support( 'post-formats', array( 'status', 'image', 'quote','audio') );
?></code>
在首页文章输出的大循环中增加一个判断函数,其判断大概是“如果文章形式是‘音频’则输出一下格式,若果是‘相册’,则输出一下格式。大概判断方法为。
<?php //声明文章判断
$post_format = function_exists('get_post_format'); // WP3.0 compatibility
$format = get_post_format();
//判断文章样式是不是 状态、引用、相册、音频,若果都不是则为标准形式
if(!$post_format || !in_array($format, array('status','quote', 'image','audio'))) {//标准形式
?>
<?php
} else if($format == 'status') {//状态形式
?>
<?php
} else if($format == 'quote') { //引用形式
?>
<?php
} else if($format == 'image') {//相册形式
?>
<?php
} else if($format == 'audio') {//音乐形式
?>
<?php //结束
}
?>
</code>
那么把相应的div,css写入对应的地方。
文章形式部分功能实现
以下我针对不同形式的文章,简要说明实现部分功能的原理。
1.对于正常形式即标准形式的文章主要是输出函数
来实现的。
2.对于状态形式的主页也是输出函数
实现,是外形,样式不同罢了。
3.对于引用形式的输出,主要寻找文章中blockquote标签包裹的内容并输出。
其可以用以下函数代替the_content来输出
<?php //定义函数
$matches = array();
if(preg_match('/<cite(?:>|[^>]+>)((?!<\/cite>)[\w\W]*)<\/cite>/i', $post->post_content, $matches)) {
$source = $matches[1];
} else if($post->post_title) {
$source = $post->post_title;
} else {
$source = null;
}
$quote_type = $quote = null;
$matches = array();
if(preg_match('/<(blockquote|q)(?:>|[^>]+>)((?!<\/(?:blockquote|q)>)[\w\W]*)?<\/(?:blockquote|q)>/i', $post->post_content, $matches)) {
$quote_type = $matches[1];
$quote = $matches[2];
} else {
$quote = $post->post_content;
$quote_type = 'blockquote';
}
$quote = "<$quote_type><span class=\"quote-left\">“</span>" . trim($quote, '\u0022\u2018\u2019\u0027\u201c\u201d') . "<span class=\"quote-right\">”</span></$quote_type>";
?></code>
在所需位置直接用函数echo 显示出$quote的值,即用
代替the_content函数,同时
表示标题。
如果还是判断是不是有标题,如果没有标题则直接输出$quote,则可以用诸如以下形式的格式输出
<?php if($source) //判断是不是有标题 成立输出标题 否则只输出$quote
{ ?>
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="详细阅读<?php echo $source; ?>"><?php echo $source; ?></a></h2></div>
<?php } ?>
<a href="<?php the_permalink(); ?>"><?php echo $quote; ?></a>
</code>
4.相册形式的实现,一般只输文章中的第一张IMG标签的内容,通过以下函数来实现的
<?php //定义函数
$match = array();
$title = null;
$source = filter_var(trim($post->post_content), FILTER_VALIDATE_URL);
if(!$source && preg_match('/<img [^>]*src=[\"\']?([^\"\'\s]+)/i', $post->post_content, $match)) {
$source = $match[1];
}
if($post->post_title) {
$title = $post->post_title;
}
?></code>
在相应的位置放上
<?php if($source) { ?>
<a href="<?php the_permalink(); ?>" class="cover"><img decoding="async" src="<?php echo $source; ?>"<?php if($title) { echo ' alt="' . $title . '" title="' . $title . '"'; } ?> /></a><?php }?>
</code>
其中以下函数是判断是否有标题,如果没有则不输出标题
<?php if($title) { ?><?php echo $title; ?><?php } ?></code>
5.对于有音频形式,主要是提取文章中的video|audio|object|embed|iframe标签,如果有,则输出这些标签所包裹的内容。
最后呢,对于文章形式主要还是靠的是DIV和CSS的控制,方法大同小异,视情况而定.