首页 > Web开发 > 详细

wordpress二次开发技巧之functions.php篇

时间:2017-02-08 12:44:15      阅读:268      评论:0      收藏:0      [点我收藏+]

wordpress二次开发中对于functions.php的制作是非常多的,今天我们来分享关于wordpress二次开发技巧之functions.php的制作,希望大家可以喜欢!

下面根据需求,对各种能实现进行简单介绍。

先对functions.php文件进行介绍,通过代码实现各功能。

1. widgets sidebar 侧边栏小工具

技术分享

wordpress二次开发技巧之functions.php篇

01 /** widgets sidebar 侧边栏小工具*/
02 if( function_exists(‘register_sidebar‘<span class="crayon-sy">) ) {
03   register_sidebar(array(
04     ‘name‘ <span class="crayon-o">=> ‘First_sidebar‘<span class="crayon-sy">,
05     ‘before_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
06     ‘after_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
07     ‘before_title‘ <span class="crayon-o">=> ‘<h4>‘<span class="crayon-sy">,
08     ‘after_title‘ <span class="crayon-o">=> ‘</h4>‘
09   ));
10   register_sidebar(array(
11     ‘name‘ <span class="crayon-o">=> ‘Second_sidebar‘<span class="crayon-sy">,
12     ‘before_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
13     ‘after_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
14     ‘before_title‘ <span class="crayon-o">=> ‘<h4>‘<span class="crayon-sy">,
15     ‘after_title‘ <span class="crayon-o">=> ‘</h4>‘
16   ));
17   register_sidebar(array(
18     ‘name‘ <span class="crayon-o">=> ‘Third_sidebar‘<span class="crayon-sy">,
19     ‘before_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
20     ‘after_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
21     ‘before_title‘ <span class="crayon-o">=> ‘<h4>‘<span class="crayon-sy">,
22     ‘after_title‘ <span class="crayon-o">=> ‘</h4>‘
23   ));
24   register_sidebar(array(
25     ‘name‘ <span class="crayon-o">=> ‘Fourth_sidebar‘<span class="crayon-sy">,
26     ‘before_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
27     ‘after_widget‘ <span class="crayon-o">=> ‘‘<span class="crayon-sy">,
28     ‘before_title‘ <span class="crayon-o">=> ‘<h4>‘<span class="crayon-sy">,
29     ‘after_title‘ <span class="crayon-o">=> ‘</h4>‘
30   ));
31 }
32   
33 register_nav_menus(array("primary" => "Primary Navigation"));

2. 后台支持自定义菜单

技术分享

wordpress二次开发技巧之functions.php篇

3. 面包屑导航

技术分享

01 // 面包屑导航注册代码
02 function wheatv_breadcrumbs() {
03   $delimiter ‘<i>></i>‘<span class="crayon-sy">;
04   $name ‘首页‘<span class="crayon-sy">; //text for the ‘Home‘ link
05   $currentBefore ‘‘<span class="crayon-sy">;
06   $currentAfter ‘‘<span class="crayon-sy">;
07   
08   if ( !is_home() && !is_front_page() || is_paged() ) {
09   
10   echo ‘‘<span class="crayon-sy">;
11   global $post;
12   // $home = get_bloginfo(‘url‘);
13   $home = get_option(‘home‘<span class="crayon-sy">);
14   echo ‘<a href="‘<span class="crayon-sy">.$home.‘" >‘<span class="crayon-sy">. $name ‘ </a>‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">;
15   
16   if ( is_category() ) {
17     global $wp_query;
18     $cat_obj $wp_query->get_queried_object();
19     $thisCat $cat_obj->term_id;
20     $thisCat = get_category($thisCat);
21     $parentCat = get_category($thisCat->parent);
22     if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ‘ ‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">));
23       echo $currentBefore ‘‘<span class="crayon-sy">;
24       single_cat_title();
25       echo ‘‘ <span class="crayon-sy">. $currentAfter;
26   
27     elseif ( is_day() ) {
28       echo ‘‘ <span class="crayon-sy">. get_the_time(‘Y‘<span class="crayon-sy">) .‘ ‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">;
29       echo ‘‘ <span class="crayon-sy">. get_the_time(‘F‘<span class="crayon-sy">) .‘ ‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">;
30       echo $currentBefore . get_the_time(‘d‘<span class="crayon-sy">) . $currentAfter;
31   
32     elseif ( is_month() ) {
33       echo ‘‘ <span class="crayon-sy">. get_the_time(‘Y‘<span class="crayon-sy">) .‘ ‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">;
34       echo $currentBefore . get_the_time(‘F‘<span class="crayon-sy">) . $currentAfter;
35   
36     elseif ( is_year() ) {
37       echo $currentBefore . get_the_time(‘Y‘<span class="crayon-sy">) . $currentAfter;
38   
39     elseif ( is_single() ) {
40       $cat = get_the_category(); $cat $cat[0];
41       echo get_category_parents($cat, TRUE, ‘ ‘ <span class="crayon-sy">. $delimiter ‘ ‘<span class="crayon-sy">);
42       echo $currentBefore;
43       the_title();
44       echo $currentAfter;
45   
46     elseif ( is_page() && !$post->post_parent ) {
47       echo $currentBefore;
48       the_title();
49       echo $currentAfter;
50   
51     elseif ( is_page() && $post->post_parent ) {
52       $parent_id $post->post_parent;
53       $breadcrumbs array();
54       while ($parent_id) {
55         $page = get_page($parent_id);
56         $breadcrumbs[] = ‘‘ <span class="crayon-sy">. get_the_title($page->ID) .‘‘<span class="crayon-sy">;
57         $parent_id $page->post_parent;
58       }
59       $breadcrumbs array_reverse($breadcrumbs);
60       foreach ($breadcrumbs as $crumbecho $crumb ‘ ‘ <span class="crayon-sy">.$delimiter ‘ ‘<span class="crayon-sy">;
61       echo $currentBefore;
62       the_title();
63       echo $currentAfter;
64   
65     elseif ( is_search() ) {
66       echo $currentBefore ‘搜索结果‘ <span class="crayon-sy">. get_search_query() . ‘‘ <span class="crayon-sy">. $currentAfter;
67   
68     elseif ( is_tag() ) {
69       echo $currentBefore ‘搜索标签: ‘<span class="crayon-sy">;
70       single_tag_title();
71       echo ‘‘ <span class="crayon-sy">. $currentAfter;
72   
73     elseif ( is_author() ) {
74       global $author;
75       $userdata = get_userdata($author);
76       echo $currentBefore ‘Articles posted by ‘ <span class="crayon-sy">. $userdata->display_name . $currentAfter;
77   
78     elseif ( is_404() ) {
79       echo $currentBefore ‘Error 404‘ <span class="crayon-sy">. $currentAfter;
80   }
81   
82   if ( get_query_var(‘paged‘<span class="crayon-sy">) ) {
83     if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ‘ (‘<span class="crayon-sy">;
84       echo __(‘第‘<span class="crayon-sy">) . ‘‘ <span class="crayon-sy">. get_query_var(‘paged‘<span class="crayon-sy">) . ‘页‘<span class="crayon-sy">;
85     if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ‘)‘<span class="crayon-sy">;
86   }
87   echo ‘‘<span class="crayon-sy">;
88   }
89 }

显示面包屑导航(category.php或single.php等)

1 <?php wheatv_breadcrumbs(); ?>

4.  文章访问量(点击数)

技术分享

wordpress二次开发技巧之functions.php篇

显示点击量(如category.php或single.php)

1 <?php echo getPostViews(get_the_ID()); ?>

5. 文章中所有链接新窗口中打开

6. 清除wp自带无用头部信息

7. 自动保存和文章修订功能

技术分享

wordpress二次开发技巧之functions.php篇

8. 彩色静态标签云

技术分享

wordpress二次开发技巧之functions.php篇

输出标签

9. 搜索结果关键词高亮显示

具体实现,再另写文章介绍,后续可通过搜索找到。

技术分享

wordpress二次开发技巧之functions.php篇

10. 自定义登录界面

在不更改html的情况下,可通过引入样式文件,自定义登录界面。

技术分享

wordpress二次开发技巧之functions.php篇

11. 获得当前文章的位置

技术分享

wordpress二次开发技巧之functions.php篇

技术分享

wordpress二次开发技巧之functions.php篇

显示上下篇及位置,在single.php

12. 热门标签ajax加载

点击换一换

技术分享

wordpress二次开发技巧之functions.php篇

HTML部分

使用JS实现点击交互

13. 外链加上nofollow

防止引入的网站有问题,被降权

01 // 文章外部链接加上nofollow
02 add_filter( ‘the_content‘‘cn_nf_url_parse‘);
03 function cn_nf_url_parse( $content ) {
04   
05   $regexp "<as[^>]*href=("??)([^" >]*?)1[^>]*>";
06   if(preg_match_all("/$regexp/siU"$content$matches, PREG_SET_ORDER)) {
07     if( !empty($matches) ) {
08   
09       $srcUrl = get_option(‘siteurl‘);
10       for ($i=0; $i count($matches); $i++)
11       {
12   
13         $tag $matches[$i][0];
14         $tag2 $matches[$i][0];
15         $url $matches[$i][0];
16   
17         $noFollow ‘‘;
18   
19         $pattern ‘/targets*=s*"s*_blanks*"/‘;
20         preg_match($pattern$tag2$match, PREG_OFFSET_CAPTURE);
21         ifcount($match) < 1 )
22           $noFollow .= ‘ target="_blank" ‘;
23   
24         $pattern ‘/rels*=s*"s*[n|d]ofollows*"/‘;
25         preg_match($pattern$tag2$match, PREG_OFFSET_CAPTURE);
26         ifcount($match) < 1 )
27           $noFollow .= ‘ rel="nofollow" ‘;
28   
29         $pos strpos($url,$srcUrl);
30         if ($pos === false) {
31           $tag = rtrim ($tag,‘>‘);
32           $tag .= $noFollow.‘>‘;
33           $content str_replace($tag2,$tag,$content);
34         }
35       }
36     }
37   }
38   
39   $content str_replace(‘]]>‘‘]]>‘$content);
40   return $content;
41   
42 }

14. 图片懒加载lazyload3. 外链加上nofollow

1 function lazyload($content) {
2   if(!is_feed()||!is_robots) {
3     $content=preg_replace(‘/<img(.+)src=[‘"]([^‘"]+)[‘"](.*)>/i‘,"<img$1data-original="$2" src="data:image/gif;base64,R0lGODlhAQABAIAAAOHh4QAAACH5BAAAAAAALAAAAAABAAEAQAICRAEAOw=="$3>n",$content);
4   }
5   return $content;
6 }
7 add_filter (‘the_content‘‘lazyload‘);

JS代码(需引入jquery.lazyload.js)

1 // lazyload
2 $("img").lazyload({
3     effect : "fadeIn",
4     threshold : 100,
5 });

15. 获取文章中第一张图

如跑马灯图

技术分享

wordpress二次开发技巧之functions.php篇

01 // 获取文章中第一张图
02 function wpdx_postimage($atts$content = null) {
03   extract(shortcode_atts(array(
04     "size" => ‘full‘,
05     "float" => ‘none‘
06   ), $atts));
07   $images =& get_children( ‘post_type=attachment&post_mime_type=image&post_parent=‘. get_the_id() );
08   foreach$images as $imageID => $imagePost )
09   $fullimage = wp_get_attachment_image($imageID$size, false);
10   $imagedata = wp_get_attachment_image_src($imageID$size, false);
11   $width = ($imagedata[1]+2);
12   $height = ($imagedata[2]+2);
13   return $fullimage;
14 }
15 add_shortcode("postimage""wpdx_postimage");

显示图片

1 <a href="<?php the_permalink(); ?>" target="_blank">
2     <?php echo do_shortcode("[postimage]"); ?>
3 </a>

16. 截取摘要

技术分享

wordpress二次开发技巧之functions.php篇

01 // 摘要字数限制
02 function new_excerpt_length($length) {
03   return 100;
04 }
05 add_filter(‘excerpt_length‘‘new_excerpt_length‘);
06   
07 // 摘要...
08 function new_excerpt_more( $more ) {
09   return ‘...‘;
10 }
11 add_filter(‘excerpt_more‘‘new_excerpt_more‘);

17. 获取文章第一个分类目录

因为一篇文章可能属于多个目录,有些地方只需要输出一个

1 // 获取文章第一个分类目录
2 function get_first_category(){
3   $category = get_the_category();
4   if($category[0]){
5     echo ‘<a class="col_cat" href="‘.get_category_link($category[0]->term_id ).‘">‘.$category[0]->cat_name.‘</a>‘;
6   }
7 }
8 add_filter(‘get_first_category‘‘get_first_category‘);

HTML

1 <?php get_first_category(); ?>

18. 分类页获得文章简介

技术分享

wordpress二次开发技巧之functions.php篇

1 // 获得category简介
2 function get_category_expert($length=240){
3   $content = get_the_content();
4   $trimmed_content = wp_trim_words( $content$length‘<a href="‘. get_permalink() .‘"> [...]</a>‘ );
5   echo $trimmed_content;
6 }
7 add_filter(‘get_category_expert‘‘get_category_expert‘);

19. 根据页面类型指定每页显示的文章数

01 // 根据页面类型指定每页显示的文章数
02 function custom_posts_per_page($query){
03     if(is_home()){
04         $query->set(‘posts_per_page‘,9);//首页每页显示8篇文章
05     }
06     if(is_search()){
07         $query->set(‘posts_per_page‘,5);//搜索页显示所有匹配的文章,不分页
08     }
09     if(is_archive()){
10         $query->set(‘posts_per_page‘,-1);//archive每页显示25篇文章
11       }
12     if(is_tag()){
13         $query->set(‘posts_per_page‘,4);//archive每页显示25篇文章
14     }
15     if(is_category()){
16         $query->set(‘posts_per_page‘,9);//archive每页显示25篇文章
17     }
18     if(is_category(11)){
19         $query->set(‘posts_per_page‘,-1);//archive每页显示25篇文章
20     }
21 }//function
22 //this adds the function above to the ‘pre_get_posts‘ action
23 add_action(‘pre_get_posts‘,‘custom_posts_per_page‘);

20. 缩略图

01 //添加特色缩略图支持
02 if ( function_exists(‘add_theme_support‘) )add_theme_support(‘post-thumbnails‘);
03   
04 /*
05 * 缩略图
06 */
07   
08 function dm_the_thumbnail() {
09   
10     global $post;
11   
12     // 判断该文章是否设置的缩略图,如果有则直接显示
13   
14     if ( has_post_thumbnail() ) {
15   
16         echo ‘<a class="at_feature" href="‘.get_permalink().‘" title="阅读全文">‘;
17   
18         the_post_thumbnail(‘thumbnail‘);
19   
20         echo ‘</a>‘;
21   
22     else //如果文章没有设置缩略图,则查找文章内是否包含图片
23   
24         $content $post->post_content;
25   
26         preg_match_all(‘/<img.*?(?: |t|r|n)?src=[‘"]?(.+?)[‘"]?(?:(?: |t|r|n)+.*?)?>/sim‘, $content$strResult, PREG_PATTERN_ORDER);
27   
28         $n count($strResult[1]);
29   
30         if($n > 0){ // 如果文章内包含有图片,就用第一张图片做为缩略图
31             // 为了得到第一张图片的215x115尺寸,得用正则替换格式
32             $thumb_first $strResult[1][0];
33             $thumb_split strrpos($thumb_first‘.‘);
34             $thumb_before substr($thumb_first, 0, $thumb_split);
35             $thumb_after substr($thumb_first$thumb_splitstrlen($thumb_first));
36             $reg "/-d*xd*/im";
37             $thumb_before = preg_replace($reg""$thumb_before);
38             $thumb_src $thumb_before.‘-215x115‘.$thumb_after;
39             echo ‘<a class="at_feature" href="‘.get_permalink().‘" title="阅读全文"><img class="animated" src="‘.$thumb_src.‘" alt="缩略图" /></a>‘;
40   
41         }else // 如果文章内没有图片,则用默认的图片。
42             $random= mt_rand(0, 19);
43             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>‘;
44   
45         }
46   
47     }
48   
49 }

显示缩略图

1 // 第一种
2 <?php if (has_post_thumbnail()){ the_post_thumbnail();} ?>
3   
4  
5 // 第二种
6 <?php dm_the_thumbnail(); ?>

wordpress二次开发技巧之functions.php篇

原文:http://www.cnblogs.com/wpxuexi/p/6377510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!