前言
最近又写了个网站,也是基于wordpress,LEE周刊官网:www.leeweekly.com。这个网站和轩枫阁的部分功能有所不同,部分功能困扰了挺久,通过Google搜索到了各种解决方案,记录成文备忘。
LEE周刊新版PC官网设计开发总结:http://t.cn/RyzrUD4
functions.php
下面根据需求,对各种能实现进行简单介绍。
先对functions.php文件进行介绍,通过代码实现各功能。
1. widgets sidebar 侧边栏小工具
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 |
/** widgets sidebar 侧边栏小工具*/ if( function_exists('register_sidebar') ) { register_sidebar(array( 'name' => 'First_sidebar', 'before_widget' => '', 'after_widget' => '', 'before_title' => '<h4>', 'after_title' => '</h4>' )); register_sidebar(array( 'name' => 'Second_sidebar', 'before_widget' => '', 'after_widget' => '', 'before_title' => '<h4>', 'after_title' => '</h4>' )); register_sidebar(array( 'name' => 'Third_sidebar', 'before_widget' => '', 'after_widget' => '', 'before_title' => '<h4>', 'after_title' => '</h4>' )); register_sidebar(array( 'name' => 'Fourth_sidebar', 'before_widget' => '', 'after_widget' => '', 'before_title' => '<h4>', 'after_title' => '</h4>' )); } register_nav_menus(array("primary" => "Primary Navigation")); |
2. 后台支持自定义菜单
1 2 3 4 5 6 7 8 9 10 11 |
/*nav 后台自定义菜单*/ if(function_exists('register_nav_menus')){ register_nav_menus( array( 'header-menu' => __( '导航自定义菜单' ), 'footer-menu' => __( '页角自定义菜单' ), 'sider-menu' => __('侧边栏菜单'), 'primary' => __( 'Primary Navigation', 'lee' ), ) ); } |
输出菜单,在如header.php插入显示菜单的代码
1 |
<?php wp_nav_menu( array( 'container' => '' ) ); ?> |
3. 面包屑导航
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
// 面包屑导航注册代码 function wheatv_breadcrumbs() { $delimiter = '<i>></i>'; $name = '首页'; //text for the 'Home' link $currentBefore = ''; $currentAfter = ''; if ( !is_home() && !is_front_page() || is_paged() ) { echo ''; global $post; // $home = get_bloginfo('url'); $home = get_option('home'); echo '<a href="'.$home.'" >'. $name . ' </a>' . $delimiter . ' '; if ( is_category() ) { global $wp_query; $cat_obj = $wp_query->get_queried_object(); $thisCat = $cat_obj->term_id; $thisCat = get_category($thisCat); $parentCat = get_category($thisCat->parent); if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' ')); echo $currentBefore . ''; single_cat_title(); echo '' . $currentAfter; } elseif ( is_day() ) { echo '' . get_the_time('Y') . ' ' . $delimiter . ' '; echo '' . get_the_time('F') . ' ' . $delimiter . ' '; echo $currentBefore . get_the_time('d') . $currentAfter; } elseif ( is_month() ) { echo '' . get_the_time('Y') . ' ' . $delimiter . ' '; echo $currentBefore . get_the_time('F') . $currentAfter; } elseif ( is_year() ) { echo $currentBefore . get_the_time('Y') . $currentAfter; } elseif ( is_single() ) { $cat = get_the_category(); $cat = $cat[0]; echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' '); echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_page() && !$post->post_parent ) { echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_page() && $post->post_parent ) { $parent_id = $post->post_parent; $breadcrumbs = array(); while ($parent_id) { $page = get_page($parent_id); $breadcrumbs[] = '' . get_the_title($page->ID) . ''; $parent_id = $page->post_parent; } $breadcrumbs = array_reverse($breadcrumbs); foreach ($breadcrumbs as $crumb) echo $crumb . ' ' . $delimiter . ' '; echo $currentBefore; the_title(); echo $currentAfter; } elseif ( is_search() ) { echo $currentBefore . '搜索结果' . get_search_query() . '' . $currentAfter; } elseif ( is_tag() ) { echo $currentBefore . '搜索标签: '; single_tag_title(); echo '' . $currentAfter; } elseif ( is_author() ) { global $author; $userdata = get_userdata($author); echo $currentBefore . 'Articles posted by ' . $userdata->display_name . $currentAfter; } elseif ( is_404() ) { echo $currentBefore . 'Error 404' . $currentAfter; } if ( get_query_var('paged') ) { if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' ('; echo __('第') . '' . get_query_var('paged') . '页'; if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')'; } echo ''; } } |
显示面包屑导航(category.php或single.php等)
1 |
<?php wheatv_breadcrumbs(); ?> |
4. 文章访问量(点击数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//文章点击数 function getPostViews($postID){ $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); return "0"; } return $count; } function setPostViews($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); }else{ $count++; update_post_meta($postID, $count_key, $count); } } |
显示点击量(如category.php或single.php)
1 |
<?php echo getPostViews(get_the_ID()); ?> |
5. 文章中所有链接新窗口中打开
1 2 3 4 5 6 |
//为文章中所有链接添加target="_blank"属性 function autoblank($content) { $content = preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $content); return $content; } add_filter('the_content', 'autoblank'); |
6. 清除wp自带无用头部信息
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 |
//清除头部信息 //remove_action( 'wp_head', 'wp_enqueue_scripts', 1 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'rsd_link' ); remove_action( 'wp_head', 'wlwmanifest_link' ); remove_action( 'wp_head', 'index_rel_link' ); remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); //remove_action( 'wp_head', 'locale_stylesheet' ); remove_action( 'publish_future_post', 'check_and_publish_future_post', 10, 1 ); //remove_action( 'wp_head', 'noindex', 1 ); //remove_action( 'wp_head', 'wp_print_styles', 8 ); //remove_action( 'wp_head', 'wp_print_head_scripts', 9 ); remove_action( 'wp_head', 'wp_generator' ); //remove_action( 'wp_head', 'rel_canonical' ); remove_action( 'wp_footer', 'wp_print_footer_scripts' ); remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 ); remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 ); add_action('widgets_init', 'my_remove_recent_comments_style'); function my_remove_recent_comments_style() { global $wp_widget_factory; remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style')); } |
7. 自动保存和文章修订功能
1 2 3 |
//自动保存和文章修订功能 define('AUTOSAVE_INTERVAL', 120 ); // 设置自动保存间隔,单位是秒,默认60 define('WP_POST_REVISIONS', false); // 如果不禁用自动修订,最多允许保存的版本数,3表示最多保存3个修订版 |
8. 彩色静态标签云
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 彩色静态标签云 Color Tag Cloud function colorCloud($text) { $text = preg_replace_callback('|<a (.+?)>|i', 'colorCloudCallback', $text); return $text; } function colorCloudCallback($matches) { $text = $matches[1]; $color = dechex(rand(0,16777215)); $pattern = '/style=(\'|\")(.*)(\'|\")/i'; $text = preg_replace($pattern, "style=\"color:#{$color};$2;\"", $text); return "<a $text>"; } add_filter('wp_tag_cloud', 'colorCloud', 1); |
输出标签
1 |
<?php wp_tag_cloud('smallest=10&largest=14&number=32&order=RAND') ?> |
9. 搜索结果关键词高亮显示
具体实现,再另写文章介绍,后续可通过搜索找到。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 搜索结果关键词高亮显示 function lee_set_query() { $query = attribute_escape(get_search_query()); if(strlen($query) > 0){ echo ' <script type="text/javascript"> var lee_query = "'.$query.'"; </script> '; } } function lee_init_jquery() { wp_enqueue_script('jquery'); } add_action('init', 'lee_init_jquery'); add_action('wp_print_scripts', 'lee_set_query'); |
10. 自定义登录界面
在不更改html的情况下,可通过引入样式文件,自定义登录界面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 自定义登录界面 function custom_login(){ echo '<link rel="stylesheet" type="text/css" href="' . get_bloginfo('template_directory') . '/css/login.css" />'; } add_action('login_head', 'custom_login'); function login_headerurl($url) { return get_bloginfo('url'); } add_filter('login_headerurl', 'login_headerurl'); function login_headertitle($title){ return __('轩枫阁'); } add_filter('login_headertitle', 'login_headertitle'); |
11. 获得当前文章的位置
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 num_Pcurrent_post() { global $wpdb; $postid = get_the_ID();//获取当前文章的ID $getpost = get_post($postid); $daysago = $getpost->post_date;//获取当前文章的发布时间 $today = gmdate('Y-m-d H:i:s', time() + 3600 * 8);//获取当前服务器的时间 $count_posts = wp_count_posts(); $num_all_posts = $count_posts->publish;//总的文章数量 $result = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_date BETWEEN '$daysago' AND '$today' AND post_status='publish' AND post_type='post' ORDER BY post_date DESC "); foreach ($result as $Item) { $post_ID[] = $Item->ID; } $num_current_post = count($post_ID)-1;//当前文章发布以前的文章数量总数 $output .= $num_current_post.'/'.$num_all_posts; echo $output; } function num_Ncurrent_post() { global $wpdb; $postid = get_the_ID();//获取当前文章的ID $getpost = get_post($postid); $daysago = $getpost->post_date;//获取当前文章的发布时间 $today = gmdate('Y-m-d H:i:s', time() + 3600 * 8);//获取当前服务器的时间 $count_posts = wp_count_posts(); $num_all_posts = $count_posts->publish;//总的文章数量 $result = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_date BETWEEN '$daysago' AND '$today' AND post_status='publish' AND post_type='post' ORDER BY post_date DESC "); foreach ($result as $Item) { $post_ID[] = $Item->ID; } $num_current_post = count($post_ID)+1;//当前文章发布以前的文章数量总数 $output .= $num_current_post.'/'.$num_all_posts; echo $output; } |
显示上下篇及位置,在single.php
1 2 3 4 5 |
<?php if (get_next_post()) { echo next_post_link('%link',__( '<span title="上一篇:%title">上一篇</span>', 'lee' ),$in_same_cat = false,$excluded_categories = '11'); } else { echo '<a class="arc_nav_new">已最新</a>'; }?> <?php num_Pcurrent_post(); ?> <?php num_Ncurrent_post(); ?> <?php if (get_previous_post()) { echo previous_post_link('%link',__( '<span title="下一篇:%title">下一篇</span>', 'lee' ),$in_same_cat = false,$excluded_categories = '11'); } else { echo '<a class="arc_nav_new">已最后</a>'; }?> |
12. 热门标签ajax加载
点击换一换
1 2 3 4 5 6 7 8 9 10 11 |
// 热门标签ajax部分 function tagLoad(){ if( isset($_GET['action'])){ if($_GET['action'] == 'tag' ){ echo wp_tag_cloud('smallest=10&largest=14&number=32&order=RAND'); die; } } } add_action('init', 'tagLoad'); |
HTML部分
1 |
<a class="tag_change" href="<?php echo get_option('home')."/?action=tag"; ?>">换一换</a> |
使用JS实现点击交互
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 标签云ajax $(".tag_change").click(function(){ $.ajax({ url: $(this).attr("href"), type: 'get', beforeSend: function() { // 可以显示loading }, error: function(error) { // 错误处理 }, success: function(data) { // 成功返回数据,先清空初始标签,装载新数据淡入 $(".tag_content").empty().append($(data).fadeIn(200)); } }); return false; }); |
13. 外链加上nofollow
防止引入的网站有问题,被降权
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 34 35 36 37 38 39 40 41 42 |
// 文章外部链接加上nofollow add_filter( 'the_content', 'cn_nf_url_parse'); function cn_nf_url_parse( $content ) { $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>"; if(preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if( !empty($matches) ) { $srcUrl = get_option('siteurl'); for ($i=0; $i < count($matches); $i++) { $tag = $matches[$i][0]; $tag2 = $matches[$i][0]; $url = $matches[$i][0]; $noFollow = ''; $pattern = '/target\s*=\s*"\s*_blank\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' target="_blank" '; $pattern = '/rel\s*=\s*"\s*[n|d]ofollow\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' rel="nofollow" '; $pos = strpos($url,$srcUrl); if ($pos === false) { $tag = rtrim ($tag,'>'); $tag .= $noFollow.'>'; $content = str_replace($tag2,$tag,$content); } } } } $content = str_replace(']]>', ']]>', $content); return $content; } |
14. 图片懒加载lazyload
1 2 3 4 5 6 7 |
function lazyload($content) { if(!is_feed()||!is_robots) { $content=preg_replace('/<img(.+)src=[\'"]([^\'"]+)[\'"](.*)>/i',"<img\$1data-original=\"\$2\" src=\"data:image/gif;base64,R0lGODlhAQABAIAAAOHh4QAAACH5BAAAAAAALAAAAAABAAEAQAICRAEAOw==\"\$3>\n",$content); } return $content; } add_filter ('the_content', 'lazyload'); |
JS代码(需引入jquery.lazyload.js)
1 2 3 4 5 |
// lazyload $("img").lazyload({ effect : "fadeIn", threshold : 100, }); |
15. 获取文章中第一张图
如跑马灯图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 获取文章中第一张图 function wpdx_postimage($atts, $content = null) { extract(shortcode_atts(array( "size" => 'full', "float" => 'none' ), $atts)); $images =& get_children( 'post_type=attachment&post_mime_type=image&post_parent=' . get_the_id() ); foreach( $images as $imageID => $imagePost ) $fullimage = wp_get_attachment_image($imageID, $size, false); $imagedata = wp_get_attachment_image_src($imageID, $size, false); $width = ($imagedata[1]+2); $height = ($imagedata[2]+2); return $fullimage; } add_shortcode("postimage", "wpdx_postimage"); |
显示图片
1 2 3 |
<a href="<?php the_permalink(); ?>" target="_blank"> <?php echo do_shortcode("[postimage]"); ?> </a> |
16. 截取摘要
1 2 3 4 5 6 7 8 9 10 11 |
// 摘要字数限制 function new_excerpt_length($length) { return 100; } add_filter('excerpt_length', 'new_excerpt_length'); // 摘要... function new_excerpt_more( $more ) { return '...'; } add_filter('excerpt_more', 'new_excerpt_more'); |
17. 获取文章第一个分类目录
因为一篇文章可能属于多个目录,有些地方只需要输出一个
1 2 3 4 5 6 7 8 |
// 获取文章第一个分类目录 function get_first_category(){ $category = get_the_category(); if($category[0]){ echo '<a class="col_cat" href="'.get_category_link($category[0]->term_id ).'">'.$category[0]->cat_name.'</a>'; } } add_filter('get_first_category', 'get_first_category'); |
HTML
1 |
<?php get_first_category(); ?> |
18. 分类页获得文章简介
1 2 3 4 5 6 7 |
// 获得category简介 function get_category_expert($length=240){ $content = get_the_content(); $trimmed_content = wp_trim_words( $content, $length, '<a href="'. get_permalink() .'"> [...]</a>' ); echo $trimmed_content; } add_filter('get_category_expert', 'get_category_expert'); |
19. 根据页面类型指定每页显示的文章数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 根据页面类型指定每页显示的文章数 function custom_posts_per_page($query){ if(is_home()){ $query->set('posts_per_page',9);//首页每页显示8篇文章 } if(is_search()){ $query->set('posts_per_page',5);//搜索页显示所有匹配的文章,不分页 } if(is_archive()){ $query->set('posts_per_page',-1);//archive每页显示25篇文章 } if(is_tag()){ $query->set('posts_per_page',4);//archive每页显示25篇文章 } if(is_category()){ $query->set('posts_per_page',9);//archive每页显示25篇文章 } if(is_category(11)){ $query->set('posts_per_page',-1);//archive每页显示25篇文章 } }//function //this adds the function above to the 'pre_get_posts' action add_action('pre_get_posts','custom_posts_per_page'); |
20. 缩略图
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//添加特色缩略图支持 if ( function_exists('add_theme_support') )add_theme_support('post-thumbnails'); /* * 缩略图 */ function dm_the_thumbnail() { global $post; // 判断该文章是否设置的缩略图,如果有则直接显示 if ( has_post_thumbnail() ) { echo '<a class="at_feature" href="'.get_permalink().'" title="阅读全文">'; the_post_thumbnail('thumbnail'); echo '</a>'; } else { //如果文章没有设置缩略图,则查找文章内是否包含图片 $content = $post->post_content; preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER); $n = count($strResult[1]); if($n > 0){ // 如果文章内包含有图片,就用第一张图片做为缩略图 // 为了得到第一张图片的215x115尺寸,得用正则替换格式 $thumb_first = $strResult[1][0]; $thumb_split = strrpos($thumb_first, '.'); $thumb_before = substr($thumb_first, 0, $thumb_split); $thumb_after = substr($thumb_first, $thumb_split, strlen($thumb_first)); $reg = "/-\d*x\d*/im"; $thumb_before = preg_replace($reg, "", $thumb_before); $thumb_src = $thumb_before.'-215x115'.$thumb_after; echo '<a class="at_feature" href="'.get_permalink().'" title="阅读全文"><img class="animated" src="'.$thumb_src.'" alt="缩略图" /></a>'; }else { // 如果文章内没有图片,则用默认的图片。 $random= mt_rand(0, 19); echo '<a class="at_feature" href="'.get_permalink().'" title="阅读全文"><img class="animated" src="'.get_bloginfo('template_url').'/images/thumbnail/default_thumbnail_'.$random.'.jpg" alt="缩略图" /></a>'; } } } |
显示缩略图
1 2 3 4 5 6 |
// 第一种 <?php if (has_post_thumbnail()){ the_post_thumbnail();} ?> // 第二种 <?php dm_the_thumbnail(); ?> |
感谢分享,值得收藏
感谢博主的分享~
真的很不错 很赞
方法很好
很实用
你的这个lazyload怎么这么少代码?
大哥,能告诉我你显示代码是用的哪个插件吗?
Crayon Syntax Highlighter
谢谢大哥,大哥太好人了,已经用上了
很厉害的样子 收藏了
文章访问量(点击数)这个为啥不生效呢?
可能是因为新版本生效吧,我的是4.0的主题,OK的
你漏了加入循环里面的一行代码
博主,我超级喜欢你这个主题,很日系,能发我不 个人网站xyrland.com 邮箱273761959@qq.cpm
自研主题不分享哦
寝室里听到这样的话:
甲:如果能穿越时空回到秦朝,以你现在的专业,能做点什么?
乙:学测量的,可以当个风水先生。
丙:搞物流的,难不成要给秦始皇赶马车?
大神我想问问你做LEE周刊官网花了多长时间哇?
一两周吧,认真写的话。我是设计+重构+JS都写了的
太厉害了[good][good],我再认真学习一周看看[嘻嘻]
太好了,最近正在为了wordpress发愁呢,从来没接触过wordpress,然后公司需要我一个人来开发一个网站,我只会前端知识,你说有可能我一个人开发一个类似LEE周刊的这种网站吗?
挺不错的[嘻嘻]
赞一个,先码走了
我默默收藏了,不留点声息
最喜欢你这种访客