zoukankan      html  css  js  c++  java
  • wordpress二次开发技巧之functions.php篇

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

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

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

    1. widgets sidebar 侧边栏小工具

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

    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篇

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

    3. 面包屑导航

    asdfgvsdgsdf

    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篇

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

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

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

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

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

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

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

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

    8. 彩色静态标签云

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

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

    输出标签

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

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

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

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

    10. 自定义登录界面

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

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

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

    11. 获得当前文章的位置

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

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

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

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

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

    12. 热门标签ajax加载

    点击换一换

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

    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篇

    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篇

    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篇

    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(); ?>
  • 相关阅读:
    撒谎
    可怜的猪
    GIS学习笔记(五)
    国产木马冰河2.2
    矛盾
    GIS学习笔记(六)
    男人如衣服
    VS2005快捷键大全
    慧悟
    DOS命令
  • 原文地址:https://www.cnblogs.com/wpxuexi/p/6377510.html
Copyright © 2011-2022 走看看