欢迎来到《真香,30天做一套wordpress主题》系列文章,我们的目标是(没有蛀牙!)建立一套全新的wordpress主题,花上30天的时间闭关修炼,如果你看到的第一篇文章不是《基础框架搭建》,建议你关注我们(数字江湖异志录),从该系列的第一篇开始阅读。
我们将尽量保持文章的循序渐进和通俗易懂,请确保自己已经掌握了那一篇文章的全部内容时才选择跳过,不然可能会错过关键的信息噢~
这里我们假定你已经知晓了以下基础知识,这些基础知识对理解文章内容是至关重要的:
1. html/css/js基础
2. php基础
3. 如何使用wordpress
4. 如何搭建web环境
如果你已经知晓了以上基础知识,恭喜你,本系列的任何文章内容对你而言都没有什么难度。
图标字体
我们现在为我们的主题引入iconfont(图标字体),先把图标字体准备好:
查阅amp文档之后,我们可以了解到amp可以直接引入字体css:
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=tangerine">
但是这种方式要求引入的css所属域只能是以下列表里的网站:
· typography.com: https://cloud.typography.com· fonts.com: https://fast.fonts.net· google fonts: https://fonts.googleapis.com· typekit: https://use.typekit.net· font awesome: https://maxcdn.bootstrapcdn.com, https://use.fontawesome.com
不在这个白名单里的外链css是无法在amp页面引入的,还好我们可以选择直接在页面css中引入字体文件,就像是这样:
@font-face { font-family: 'iconfont'; src: url('<?php echo get_template_directory_uri() ?>/fonts/iconfont.eot?#iefix') format('embedded-opentype'), url('<?php echo get_template_directory_uri() ?>/fonts/iconfont.woff2') format('woff2'), url('<?php echo get_template_directory_uri() ?>/fonts/iconfont.woff') format('woff'), url('<?php echo get_template_directory_uri() ?>/fonts/iconfont.ttf') format('truetype'), url('<?php echo get_template_directory_uri() ?>/fonts/iconfont.svg#iconfont') format('svg'); }
然后我们直接再页面里定义并使用iconfont中图标对应的unicode:
.iconfont { font-family: "iconfont"; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
完善文章列表
现在我们来继续完善文章列表,首先加入阅读更多按钮:
<div class="flex-box"> <a href="<?php the_permalink(); ?>" class="read-more"><?php _e('read more'); ?><span class="iconfont icon-ml-readmore"></span></a> </div>
这里我们就用上了iconfont,效果如下:
现在我们加上评论、阅读、点赞信息,这里需要注意,wordpress默认其实是没有浏览量和点赞的,这里我们在functions.php里加入这些功能,然后后面我们就可以到页面模板里插入这个方法:
// add viewsfunction is_spider() { $agent= strtolower($_server['http_user_agent']); if (!empty($agent)) { $spiders= array( 'googlebot', 'baiduspider', 'ia_archiver', 'r6_feedfetcher', 'netcraftsurveyagent', 'sogou web spider', 'bingbot', 'yahoo! slurp', 'facebookexternalhit', 'printfulbot', 'msnbot', 'twitterbot', 'unwindfetchor', 'urlresolver' ); foreach($spiders as $val) { if (strpos($agent, strtolower($val)) !== false) { return true; } } } else { return false; }}function set_post_views(){ if (is_singular() && !is_spider()) { $post_id = get_the_id(); if($post_id) { $post_views = (int)get_post_meta($post_id, 'views', true); if(!update_post_meta($post_id, 'views', ($post_views+1))) { add_post_meta($post_id, 'views', 1, true); } } }}// add likesfunction set_post_likes(){ // 暂时空置 以后实现}
我们加了一个is_spider方法,让浏览量的统计将搜索引擎蜘蛛排除在外,关于点赞的功能我们也留待以后实现,我们先预定好这两个参数,然后到页面里显示:
<div class="flex-box justify-between"> <a href="<?php the_permalink(); ?>" class="read-more"><?php _e('read more'); ?><span class="iconfont icon-ml-readmore"></span></a> <div class="flex-box post-meta-box"> <a class="post-meta" href="<?php the_permalink() ?>#comments"><span class="iconfont icon-mr-postmeta"></span><?php comments_number('0', '1', '%'); ?></a> <a class="post-meta" href="<?php the_permalink() ?>"><span class="iconfont icon-mr-postmeta"></span><?php echo (int)get_post_meta(get_the_id(), 'views', true); ?></a> <a class="post-meta" href="<?php the_permalink() ?>"><span class="iconfont icon-mr-postmeta"></span><?php echo (int)get_post_meta(get_the_id(),'likes',true); ?></a> </div> </div>
我们再加上文章的发布日期:
<div class="flex-box post-publish-date"> <div class="post-date"> <?php echo get_the_date('d') ?> </div> <div class="post-month"> <?php echo get_the_date('m') ?> </div> </div>
这样我们的首页文章列表就基本完成了:
现在我们做今天的最后一项工作,程序员最爱之分页:
<?php echo get_the_posts_pagination( array( 'mid_size' => 3, 'prev_next' => false, ) ); ?>
声明?就这么几行就ok了?没错!我们加上一些css描述后,就成这样了:
wordpress对分页的输出还是比较好的,基本不用费事就完成了。
总结和预告
今天我们为主题引入了iconfont自定义图标,完成了文章列表页的全部内容,最后的分页也十分之轻松。
明天我们将挑战制作右侧边栏,这也是wordpress传统blog主题中至关重要的一部分。
如果你喜欢这个系列的文章,赶快关注我们(数字江湖异志录)吧,不要错过后续的更多干货噢。