分享收集的wordpress实用功能代码

以下代码均搜集于网络,使用方式都是添加到主题的functions.php文件中。

functions.php是WordPress预留的功能函数文件,专门用于添加各种自定义函数代码。现在的WordPress主题的功能看似越来越强大了,一般都自带了 functions.php 这个文件(通常在主题根目录)。强烈建议使用专业的代码编辑工具进行编辑,比如 Notepad++、Sublime Text、EditPlus、DreamWeaver等,使用这类工具的好处:支持代码高亮、代码纠错提示、快捷插入代码片段、支持选择编码类型等等。如果你懒省事使用电脑自带的txt文本编辑器编辑很可能会导致代码错误、编码错误等问题(小朱以前深受其害)!另外要提醒的是很多 FTP软件默认也是调用 txt记事本编辑器的 ,需要注意。

搜索结果页面关键字

为搜索结果页中的标题和正文的关键字添加highlight类,然后通过CSS设定高亮样式。

function c7sky_highlight_search_keywords($text){ if ( is_search() ) { $s = get_search_query(); $keys = explode(' ', $s); $text = preg_replace('/(' . implode('|', $keys) . ')/iu', '<strong class="highlight">$1</strong>', $text); } return $text;
}
add_filter( 'the_title', 'c7sky_highlight_search_keywords' );
add_filter( 'the_excerpt', 'c7sky_highlight_search_keywords' );

搜索关键字为空时自动跳转到首页 

默认情况下,如果关键字为空,WordPress 会列出所有的文章。不如自动跳转到首页。

function c7sky_redirect_blank_search( $query_variables ) { if ( isset( $_GET['s'] ) && empty( $_GET['s']) ) { wp_redirect( home_url() ); exit; } return $query_variables;
}
add_filter( 'request', 'c7sky_redirect_blank_search' );

 搜索自动跳转只有一个结果的页面

实现搜索结果只有一个时自动跳转到文章页,这种结果直接可以优化用户使用步骤提高用户体验。相关文章:搜索自动跳转只有一个结果的页面

add_action('template_redirect', 'redirect_single_post');
function redirect_single_post() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1 && $wp_query->max_num_pages == 1) {  //搜索结果仅有只有一个
            wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );      //直接将结果跳转到此页面
            exit;
        }
    }

}

关闭文章的标签功能

用不到标签,留着碍眼?去掉吧,就这么简单粗暴。

function c7sky_unregister_post_tag() { unregister_taxonomy_for_object_type('post_tag', 'post');
}
add_action( 'init', 'c7sky_unregister_post_tag' );

 在文章标题旁添加检查百度是否已收录(仅管理员可见)

判断当前文章是否被百度收录,若没有被收录则可点击提交至百度,加速收录。相关文章:在文章标题旁添加检查百度是否已收录

//判断当前文章是否被百度收录,若没有被收录则可点击提交至百度,加速收录!(此插件在文章页面仅管理员可见)
//Author: Jovae
function d4v($url){
$url=’http://www.baidu.com/s?wd=’.$url;
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$rs=curl_exec($curl);
curl_close($curl);
if(!strpos($rs,’没有找到’)){
return 1;
}else{
return 0;
}
}
add_filter( ‘the_content’, ‘baidu_submit’ );
function baidu_submit( $content ) {
if( is_single() && current_user_can( ‘manage_options’) )
if(d4v(get_permalink()) == 1)
$content=”<p align=right>百度已收录(仅管理员可见)</p>”.$content;
else
$content=”<p align=right><b><a style=color:red target=_blank href=http://zhanzhang.baidu.com/sitesubmit/index?sitename=”.get_permalink().”>百度未收录!点击此处提交</a></b>(仅管理员可见)</p>”.$content;
return $content;
}

清理 WordPress 菜单中的 classes

WordPress 菜单默认会输出一堆然并卵的 classes。如果你有洁癖,可以只保留你觉得有用的 classes,比如我觉得 current-menu-item 和 menu-item-has-children 最有用了。

function c7sky_cleanup_nav_menu_class( $classes ) { return array_intersect($classes, array( 'current-menu-item', 'menu-item-has-children' ));
}
add_filter( 'nav_menu_css_class', 'c7sky_cleanup_nav_menu_class' );

自动设置文章的第一张图为特色图像

自动把文章中上传的第一张图片设置为特色图像。(不支持外链图片

function c7sky_autoset_featured_image() { global $post; if (!is_object($post)) return; $already_has_thumb = has_post_thumbnail($post->ID); if (!$already_has_thumb) { $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" ); if ($attached_image) { foreach ($attached_image as $attachment_id => $attachment) { set_post_thumbnail($post->ID, $attachment_id); } } }
}
add_action( 'the_post', 'c7sky_autoset_featured_image' );
add_action( 'save_post', 'c7sky_autoset_featured_image' );
add_action( 'draft_to_publish', 'c7sky_autoset_featured_image' );
add_action( 'new_to_publish', 'c7sky_autoset_featured_image' );
add_action( 'pending_to_publish', 'c7sky_autoset_featured_image' );
add_action( 'future_to_publish', 'c7sky_autoset_featured_image' );

添加短代码

把 [attachment id=”1,2,3″] 输出为一个附件列表。

function c7sky_attachment_shortcode( $atts ) { $ids = explode(',', $atts['ids']); $html = ''; foreach ($ids as $id) { $url = wp_get_attachment_url( $id ); $name = basename($url); $html .= '<li><a class="file" href="' . $url . '" target="_blank">' . basename($url) . '</a></li>'; } return '<div class="attachment-box"><h5 class="title">附件:</h5><ul>' . $html . '</ul></div>';
}
add_shortcode( 'attachment', 'c7sky_attachment_shortcode' );

获取文章的第一张图片

获取文章的第一张图片,没什么可说的,见代码:

function c7sky_get_first_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('//i', $post->post_content, $matches); $first_img = $matches[1][0]; if ( empty($first_img) ) { $first_img = "/path/to/default.png"; } return $first_img;
}

为WordPress博客复制文字添加版权信息功能

复制博客内容后,自动加入了对方的版权信息,或者是推荐阅读灯功能。这对于保护自动版权,是很不错的一个技巧。

这个功能可以利用插件实现,但是免插件也能实现。尽量不需要用插件实现这个功能。

function add_copyright_text() { ?>;
<script type="text/javascript">
function addLink() { var body_element = document.getElementsByTagName('body')[0]; var selection;
selection = window.getSelection(); var pagelink = "
转载请注明来源: <a href='"+document.location.href+"'>"+document.location.href+"</a>"; var copy_text = selection + pagelink; var new_div = document.createElement('div');
new_div.style.left='-99999px';
new_div.style.position='absolute';
body_element.appendChild(new_div );
new_div.innerHTML = copy_text ;
selection.selectAllChildren(new_div );
window.setTimeout(function() {
body_element.removeChild(new_div ); },0);
}
document.oncopy = addLink;
</script>
<?php
}
add_action( 'wp_footer', 'add_copyright_text');

添加手气不错随机文章菜单

wordpress顶部导航栏也添加随机文章的菜单,就是点击随机生成一篇文章,可以提高旧文章曝光几率,增加用户阅读趣味。相关文章:在wordpress导航栏添加随机文章菜单

//随机一篇文章--手气不错
function random_postlite() {
global $wpdb;
$query = "SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_password = '' AND post_status = 'publish' ORDER BY RAND() LIMIT 1";
if ( isset( $_GET['random_cat_id'] ) ) {
$random_cat_id = (int) $_GET['random_cat_id'];
$query = "SELECT DISTINCT ID FROM $wpdb->posts AS p INNER JOIN $wpdb->term_relationships AS tr ON (p.ID = tr.object_id AND tr.term_taxonomy_id = $random_cat_id) INNER JOIN $wpdb->term_taxonomy AS tt ON(tr.term_taxonomy_id = tt.term_taxonomy_id AND taxonomy = 'category') WHERE post_type = 'post' AND post_password = '' AND post_status = 'publish' ORDER BY RAND() LIMIT 1";
}
if ( isset( $_GET['random_post_type'] ) ) {
$post_type = preg_replace( '|[^a-z]|i', '', $_GET['random_post_type'] );
$query = "SELECT ID FROM $wpdb->posts WHERE post_type = '$post_type' AND post_password = '' AND post_status = 'publish' ORDER BY RAND() LIMIT 1";
}
$random_id = $wpdb->get_var( $query );
wp_redirect( get_permalink( $random_id ) );
exit;
}
if ( isset( $_GET['random'] ) )
add_action( 'template_redirect', 'random_postlite' );

回复评论时添加@

将以下代码添加到function.php中可以实现回复评论自动添加@,此方法可以增强评论可观性。

function ludou_comment_add_at( $commentdata ) {
  if( $commentdata['comment_parent'] > 0) {
    $commentdata['comment_content'] = '@<a href="#comment-' . $commentdata['comment_parent'] . '">'.get_comment_author( $commentdata['comment_parent'] ) . '</a> ' . $commentdata['comment_content'];
  }

  return $commentdata;
}
add_action( 'preprocess_comment' , 'ludou_comment_add_at', 20);

自动添加以前标签

写博客添加标签可以引导搜索引擎抓取相关文章。此方法可以在写完博客后自动添加以前的标签。

//Zoo@WordPress 自动为文章添加已使用过的标签
add_action('save_post', 'auto_add_tags');
function auto_add_tags(){
	$tags = get_tags( array('hide_empty' => false) );
	$post_id = get_the_ID();
	$post_content = get_post($post_id)->post_content;
	if ($tags) {
		foreach ( $tags as $tag ) {
			// 如果文章内容出现了已使用过的标签,自动添加这些标签
			if ( strpos($post_content, $tag->name) !== false)
				wp_set_post_tags( $post_id, $tag->name, true );
		}
	}
}

自定义登陆页面logo链接

此方法可以定义博客登陆页面logo链接为博客首页网址,并可以自定义logo提示文字。注意替换提示url和文本信息。

//zoo@自定义登录界面LOGO链接为任意链接
function custom_loginlogo_url($url) {
	return 'http://www.zootui.com';      //修改URL地址
}
add_filter( 'login_headerurl', 'custom_loginlogo_url' );

//zoo@自定义登录页面LOGO提示为任意文本
function custom_loginlogo_desc($url) {
    return '返回助推博客';         //修改文本信息
}
add_filter( 'login_headertitle', 'custom_loginlogo_desc' );

强制阻止wordpress文章中的代码转义

有时候需要强制阻止wordpress文章中的代码转义,以下代码可以强制阻止wordpress文章中的代码转义。相关文章:强制阻止wordpress文章中的代码转义

//强制阻止WordPress代码转义
function git_esc_html($content) {
    $regex = '/(<pre\s+[^>]*?class\s*?=\s*?[",\'].*?prettyprint.*?[",\'].*?>)(.*?)(<\/pre>)/sim';
    return preg_replace_callback($regex, git_esc_callback, $content);
}
function git_esc_callback($matches) {
    $tag_open = $matches[1];
    $content = $matches[2];
    $tag_close = $matches[3];
    //$content = htmlspecialchars($content, ENT_NOQUOTES, get_bloginfo('charset'));
    $content = esc_html($content);
    return $tag_open . $content . $tag_close;
}
add_filter('the_content', 'git_esc_html', 2);
add_filter('comment_text', 'git_esc_html', 2);

自动添加文字标签链接

写博客添加标签链接可以增加网站内链优化seo,也可以增加网友横向点击,增加访问时间。此方法可以在写完博客后自动添加标签为内链。

//标签内链
function auto_post_link($content) {
		
	    $posttags = get_the_tags();
	 if ($posttags) {
		 foreach($posttags as $tag) {
			 $link = get_tag_link($tag->term_id); 
			 $keyword = $tag->name;
	   		$content = preg_replace('\'(?!((<.*?)|(<a.*?)))('. $keyword . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'s','<a href="'.$link.'" title="'.$keyword.'">'.$keyword.'</a>',$content,2);  //最多替换2个重复的词,避免过度SEO
		 }
	 }
	   return $content;
}
add_filter ('the_content', 'auto_post_link',0);

另一种自动添加文字标签链接的方法

/* 自动为文章内的标签添加内链开始 */

$match_num_from = 1;        //一篇文章中同一个标签少于几次不自动链接
$match_num_to = 1;      //一篇文章中同一个标签最多自动链接几次
function tag_sort($a, $b){
    if ( $a->name == $b->name ) return 0;
    return ( strlen($a->name) > strlen($b->name) ) ? -1 : 1;
}
function tag_link($content){
    global $match_num_from,$match_num_to;
        $posttags = get_the_tags();
        if ($posttags) {
            usort($posttags, "tag_sort");
            foreach($posttags as $tag) {
                $link = get_tag_link($tag->term_id);
                $keyword = $tag->name;
                $cleankeyword = stripslashes($keyword);
                $url = "<a href=\"$link\" title=\"".str_replace('%s',addcslashes($cleankeyword, '$'),__('【查看含有[%s]标签的文章】'))."\"";
                $url .= ' target="_blank"';
                $url .= ">".addcslashes($cleankeyword, '$')."</a>";
                $limit = rand($match_num_from,$match_num_to);
                $content = preg_replace( '|(<a[^>]+>)(.*)('.$ex_word.')(.*)(</a[^>]*>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
                $content = preg_replace( '|(<img)(.*?)('.$ex_word.')(.*?)(>)|U'.$case, '$1$2%&&&&&%$4$5', $content);
                $cleankeyword = preg_quote($cleankeyword,'\'');
                $regEx = '\'(?!((<.*?)|(<a.*?)))('. $cleankeyword . ')(?!(([^<>]*?)>)|([^>]*?</a>))\'s' . $case;
                $content = preg_replace($regEx,$url,$content,$limit);
                $content = str_replace( '%&&&&&%', stripslashes($ex_word), $content);
            }
        }
    return $content;
}
add_filter('the_content','tag_link',1);

添加友情链接

这个自不必说,地球人都知道啦!相关文章将wordpress新版本中隐藏的友情链接显示出来

//zootui@添加友情链接
add_filter( 'pre_option_link_manager_enabled', '__return_true' );

在首页文章列表中排除某些分类

如果不想让某些文章不在博客网站首页显示,例如一些碎言碎语、一句话笑话等短小语句,因为这些内容比较琐碎并且可能更新的很快,此时我们很多时候不希望这些内容出现在网站首页上,可以使用以下代码屏蔽该文章所属分类在首页显示。不知道怎么查看分类ID,查看此文:让wordpress博客首页不显示部分分类文章

//zooooooooooo@在首页中排除某些分类
function exclude_category_home( $query ) {
if ( $query->is_home ) {
$query->set( 'cat', '-104' ); //104是你要排除的分类ID
}
return $query;
}
add_filter( 'pre_get_posts', 'exclude_category_home' );

是网站整体变灰

很多特殊的日子里,为了表达某种悲伤的情感,我们需要把网站整体变灰。相关文章:实现wordpress网站整体变灰效果

//网站整体变灰
function hui_head_css() {
    $styles = "";
        $styles .= "html{overflow-y:scroll;filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter: grayscale(100%);}";
    if ($styles) {
        echo "<style>" . $styles . "</style>";
    }
}
add_action("wp_head", "hui_head_css");

欢迎转载,转载请注明本文链接:众推不靠谱 » 分享收集的wordpress实用功能代码

吐槽 11


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 明月登楼此文要收藏呀! :shock:回复
  2. 技术拉近你我好用!回复
  3. harries朕点了,成全臣妾了,呵呵回复
  4. Han确实是很实用呀 :smile:回复
  5. 孤军奋战:oops: :oops: :oops: 为wp用户谋福利,学习了。回复