25+个非常有用的WordPress主题函数使用技巧

在你的Wordpress主题中存在着一个非常重要的功能强大的文件,这就是众所皆知的functions.php,从字面上看就知道是一个功能函数文件,利用它便可以给你的Wordpress博客添加许多你意想不到的功能,它运行起来就像一个插件,无需你去修改Wordpress的核心文件。在今天的这篇文章中,我们将一起来分享一下超过25个的Wordpress功能函数技巧。

温馨提示:在阅读本文后应用这些函数技巧,你需要具备一些php的相关知识;所有代码均须放到functions.php文件中才能起作用。

1. 自动添加Google Analytics到Wordpress博客

这个方法是在wp_footer中添加一个action(动作),wordpress在调用此段函数时便会触发这个动作,并在每个包含有wp_footer 字符串的页面启动谷歌统计。

<?php
add_action('wp_footer', 'add_googleanalytics');
function add_googleanalytics() { ?>
// 在这里粘贴你的Google Analytics代码
<?php } ?>

更加详细的教程: Google Analytics安装指南

2. 给你的博客添加一个favicon网站图标

每一个博客都应该有一个独一无二的标志,你可以通过添加代码到header.php来实现。当然,你也可以通过添加代码到functions.php来实现。添加完下面的代码后,只需要把Favicon.ico文件上传到网站根目录即可。

// add a favicon to your
function blog_favicon() {
echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />';
}
add_action('wp_head', 'blog_favicon');

记得将你的网站图标上传到wordpress安装根目录下.

代码来源: 折腾WordPress

3. 移除WordPress版本号

WordPress有新版本出来后,总会在后台提示管理员进行升级。但假如你是给客户制作网站,而他们又不想升级的话,最好的办法就是从WordPress 头部、RSS里面以及其他任何地方移除版本的信息。

function wpbeginner_remove_version() {
return '';
}
add_filter('the_generator', 'wpbeginner_remove_version');

4. 自定义Wordpress控制面板logo

用WordPress给客户制作网站,如果给WordPress的控制面板后台添加一个自定义logo,则会让网站显的专业很多。要做到这一点,你只需要把代码添加到functions.php即可。

//hook the administrative header output
add_action('admin_head', 'my_custom_logo');

function my_custom_logo() {
echo '
<style type="text/css">
#header-logo { background-image: url('.get_bloginfo('template_directory').'/images/custom-logo.gif) !important; }
</style>
';
}

5,改变WordPress后台控制面板底部信息

如上所述,如果不想让客户知道网站是由WordPress制作,则可以修改WordPress控制面板底部的信息,只需要把下面的代码添加到 functions.php文件即可。

function remove_footer_admin () {
echo 'Fueled by <a href="http://www.wordpress.org" target="_blank">WordPress</a> | Designed by <a href="http://www.uzzz.net" target="_blank">Uzzz Productions</a> | WordPress Tutorials: <a href="http://www.wpbeginner.com" target="_blank">WPBeginner</a></p>';
}

add_filter('admin_footer_text', 'remove_footer_admin');

注:代码里面的html部分可以修改。

6,自定义WordPress控制面板模块

一些WordPress插件会在控制面板那里添加一些模块来显示相应的信息,作为一个WordPress模板设计者,你也可以通过修改functions.php文件来实现这个功能。注意替换里面的相应信息。

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
global $wp_meta_boxes;

wp_add_dashboard_widget('custom_help_widget', 'Theme Support', 'custom_dashboard_help');
}

function custom_dashboard_help() {
echo '<p>Welcome to Custom Blog Theme! Need help? Contact the developer <a href="mailto:yourusername@gmail.com">here</a>. For WordPress Tutorials visit: <a href="http://www.wpbeginner.com" target="_blank">WPBeginner</a></p>';
}

7,改变默认的 Gravatar 头像

WordPress程序默认的 Gravatar 头像很不咋地,而且到处都是千篇一律的默认头像一点都无法体现独特性。你可以把以下代码添加到functions.php文件里面,然后记得把自定义的 Gravatar 头像上传到WordPress模板的images文件夹。

add_filter( 'avatar_defaults', 'newgravatar' );

function newgravatar ($avatar_defaults) {
$myavatar = get_bloginfo('template_directory') . '/images/gravatar.gif';
$avatar_defaults[$myavatar] = "WPBeginner";
return $avatar_defaults;
}

8,让WordPress底部的版权时间显示的更生动

很多网站的版权时间都显示的是建站时的年份,有些则是显示当下的年份。事实上,这两种方式都不是太好。

最好的方式是显示从网站建设之初的年份到目前的年份位置,类似© 2006 – 2010这种显示方式。

这种效果通过以下的代码可以实现。添加完下面的代码后,系统会自动抓取发布第一篇文章的年份以及最新一篇文章的年份,并把它显示出来。

function comicpress_copyright() {
global $wpdb;
$copyright_dates = $wpdb->get_results("
SELECT
YEAR(min(post_date_gmt)) AS firstdate,
YEAR(max(post_date_gmt)) AS lastdate
FROM
$wpdb->posts
WHERE
post_status = 'publish'
");
$output = '';
if($copyright_dates) {
$copyright = "&copy; " . $copyright_dates[0]->firstdate;
if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
$copyright .= '-' . $copyright_dates[0]->lastdate;
}
$output = $copyright;
}
return $output;
}

把上面的代码添加到了functions.php文件里面后,还需要在 footer.php 任何你想显示版权时间的地方加上如下代码:

<?php echo comicpress_copyright(); ?>

9,给读者投稿文章添加姓名/来源

如果你的博客接受读者的投稿,想在该篇文章出现投稿者的姓名,同时又不想通过添加作者的这种繁琐而麻烦的方式来操作,则可以使用下面的代码。使用下面的代码后,只需要在撰写文章的时候在自定义区域填上投稿者的姓名即可。系统会自动将发布者的名称换成投稿者的名称。

这个代码对接受读者投稿较多的网站,或者是资讯型的网站非常有用(利用它来显示来源)。

add_filter( 'the_author', 'guest_author_name' );
add_filter( 'get_the_author_display_name', 'guest_author_name' );
function guest_author_name( $name ) {
global $post;
$author = get_post_meta( $post->ID, 'guest-author', true );
if ( $author )
$name = $author;
return $name;
}

10,启用文章缩略图功能

从WordPress2.9版本开始,可以给模板添加文章缩略图功能。操作方法很简单,只需要把下面的代码添加到functions.php里面。

add_theme_support( 'post-thumbnails' );

然后在要显示缩略图的地方放置下面的代码即可。

<?php the_post_thumbnail(); ?>

11,自定义WordPress 3.0 版本导航栏

WordPress 3.0 增加了一个功能,可以让WordPress模板开发者自定义导航菜单。如果你想给用户一个导航栏的选择权,只需要把下面的代码加入到 functions.php 文件里面。

add_theme_support( 'nav-menus' );

之后把下面的代码复制到你想出新的地方:

<?php wp_nav_menu( array( 'sort_column' => 'menu_order', 'container_class' => 'menu-header' ) ); ?>

12,移除WordPress默认的个人资料选项

如果你的客户想让用户可以自行添加个人资料,那么需要让这个选项更简单。其中一个方法就是移除部分选项,如AIM, Yahoo IM 和 Jabber 之类的东东。

add_filter('user_contactmethods','hide_profile_fields',10,1);

function hide_profile_fields( $contactmethods ) {
unset($contactmethods['aim']);
unset($contactmethods['jabber']);
unset($contactmethods['yim']);
return $contactmethods;
}

13,添加作者个人资料选项

如果你想更充分的展示作者的个人资料,那么你可以添加一些更个性化的资料选项,例如添加twitter 和 facebook账号等。下面的代码就是添加twitter 和 facebook账号用的。当然,你可以把里面的内容替换成其他任何你想展示的资料。这个对多博客作者尤其有用。

function my_new_contactmethods( $contactmethods ) {
// Add Twitter
$contactmethods['twitter'] = 'Twitter';
//add Facebook
$contactmethods['facebook'] = 'Facebook';

return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);

添加完是上面的代码后,你需要在author.php文件里面添加如下的代码:

<?php echo $curauth->twitter; ?>

注意:改代码仅在WordPress2.9以上的版本起作用。

14,添加侧边栏小模块

这是目前用的最多的技巧之一,很多WordPress模板开发者都已经知道,并且在用了。

if ( function_exists('register_sidebar') )
register_sidebar(array('name'=>'MiddleSidebar',
'before_widget' => '<li class="widget">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h3>',
));
register_sidebar(array('name'=>'FooterSidebar',
'before_widget' => '<li class="widget">',
'after_widget' => '</li>',
'before_title' => '<h2 class="widgettitle">',
'after_title' => '</h3>',
));

上面的代码可以增加两个侧边栏的小模块。以此类推,你可以添加无限多侧边栏的小模块。添加完上面的代码后,你需要把下面的代码添加到你要出现这边小模块的地方。

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('MiddleSidebar') ) : ?>
<!–Default sidebar info goes here–>
<?php endif; ?>

注意:侧边栏并不一定需要出现在sidebar.php文件里面。

15,优化WordPress 博客的RSS

function wpbeginner_postrss($content) {
if(is_feed()){
$content = ‘This post was written by Syed Balkhi ‘.$content.’Check out WPBeginner’;
}
return $content;
}
add_filter(‘the_excerpt_rss’, ‘wpbeginner_postrss’);
add_filter(‘the_content’, ‘wpbeginner_postrss’);

16,给RSS添加缩略图

function rss_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = ‘<p>’ . get_the_post_thumbnail($post->ID) .
‘</p>’ . get_the_content();
}
return $content;
}
add_filter(‘the_excerpt_rss’, ‘rss_post_thumbnail’);
add_filter(‘the_content_feed’, ‘rss_post_thumbnail’);

17,开启WordPress评论嵌套功能。

// enable threaded comments
function enable_threaded_comments(){
if (!is_admin()) {
if (is_singular() AND comments_open() AND (get_option(‘thread_comments’) == 1))
wp_enqueue_script(‘comment-reply’);
}
}
add_action(‘get_header’, ‘enable_threaded_comments’);

18,移除WordPress登陆面板的错误提示

add_filter(‘login_errors’,create_function(‘$a’, “return null;”));

19,关闭WordPress的搜索功能

function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
$query->is_search = false;
$query->query_vars[s] = false;
$query->query[s] = false;
// to error
if ( $error == true )
$query->is_404 = true;
}
}
add_action( ‘parse_query’, ‘fb_filter_query’ );
add_filter( ‘get_search_form’, create_function( ‘$a’, “return null;” ) );

20,启用WordPress简码功能

function showads() {
return ‘<div id=”adsense”><script type=”text/javascript”><!–
google_ad_client = “pub-XXXXXXXXXXXXXX”;
google_ad_slot = “4668915978″;
google_ad_width = 468;
google_ad_height = 60;
//–>
</script>
<script type=”text/javascript”
src=”http://pagead2.googlesyndication.com/pagead/show_ads.js”>
</script></div>’;
}
add_shortcode(‘adsense’, ‘showads’);

21,不通过.htaccess将rss地址唯一化

function custom_feed_link($output, $feed) {
$feed_url = ‘http://feeds.feedburner.com/wpbeginner’;
$feed_array = array(‘rss’ => $feed_url, ‘rss2′ => $feed_url, ‘atom’ => $feed_url, ‘rdf’ => $feed_url, ‘comments_rss2′ => ”);
$feed_array[$feed] = $feed_url;
$output = $feed_array[$feed];
return $output;
}
function other_feed_links($link) {
$link = ‘http://feeds.feedburner.com/wpbeginner’;
return $link;
}
//Add our functions to the specific filters
add_filter(‘feed_link’,'custom_feed_link’, 1, 2);
add_filter(‘category_feed_link’, ‘other_feed_links’);
add_filter(‘author_feed_link’, ‘other_feed_links’);
add_filter(‘tag_feed_link’,'other_feed_links’);
add_filter(‘search_feed_link’,'other_feed_links’);

22,启用paypal 捐赠简码

function donate_shortcode( $atts ) {
extract(shortcode_atts(array(
‘text’ => ‘Make a donation’,
‘account’ => ‘REPLACE ME’,
‘for’ => ”,
), $atts));
global $post;
if (!$for) $for = str_replace(” “,” “,$post->post_title);
return ‘<a href=”https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=’.$account.’&item_name=Donation for ‘.$for.’”>’.$text.’</a>’;
}
add_shortcode(‘donate’, ‘donate_shortcode’);

23,设定文章从发布到出现在RSS中的时间长短

function publish_later_on_feed($where) {
global $wpdb;
if ( is_feed() ) {
// timestamp in WP-format
$now = gmdate(‘Y-m-d H:i:s’);
// value for wait; + device
$wait = ‘10′; // integer
// http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
$device = ‘MINUTE’; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
// add SQL-sytax to default $where
$where .= ” AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, ‘$now’) > $wait “;
}
return $where;
}
add_filter(‘posts_where’, ‘publish_later_on_feed’);

24,自定义摘要输出时的符号

// custom excerpt ellipses for 2.9
function custom_excerpt_more($more) {
return ‘…’;
}
add_filter(‘excerpt_more’, ‘custom_excerpt_more’);
/* custom excerpt ellipses for 2.8-
function custom_excerpt_more($excerpt) {
return str_replace(‘[...]‘, ‘…’, $excerpt);
}
add_filter(‘wp_trim_excerpt’, ‘custom_excerpt_more’);
*/

25,自定义摘要输出的文字长度

function new_excerpt_length($length) {
return 100;
}
add_filter(‘excerpt_length’, ‘new_excerpt_length’);

26,显示精确评论数

add_filter(‘get_comments_number’, ‘comment_count’, 0);
function comment_count( $count ) {
if ( ! is_admin() ) {
global $id;
$comments_by_type = &separate_comments(get_comments(‘status=approve&post_id=’ . $id));
return count($comments_by_type['comment']);
} else {
return $count;
}
}

27,取消RSS输出

function fb_disable_feed() {
wp_die( __(‘No feed available,please visit our <a href=”‘. get_bloginfo(‘url’) .’”>homepage</a>!’) );
}
add_action(‘do_feed’, ‘fb_disable_feed’, 1);
add_action(‘do_feed_rdf’, ‘fb_disable_feed’, 1);
add_action(‘do_feed_rss’, ‘fb_disable_feed’, 1);
add_action(‘do_feed_rss2′, ‘fb_disable_feed’, 1);
add_action(‘do_feed_atom’, ‘fb_disable_feed’, 1);

28,显示Twitter 的订阅数以及其他资料

function rarst_twitter_user( $username, $field, $display = false ) {
$interval = 3600;
$cache = get_option(‘rarst_twitter_user’);
$url = ‘http://api.twitter.com/1/users/show.json?screen_name=’.urlencode($username);
if ( false == $cache )
$cache = array();
// if first time request add placeholder and force update
if ( !isset( $cache[$username][$field] ) ) {
$cache[$username][$field] = NULL;
$cache[$username]['lastcheck'] = 0;
}
// if outdated
if( $cache[$username]['lastcheck'] < (time()-$interval) ) {
// holds decoded JSON data in memory
static $memorycache;
if ( isset($memorycache[$username]) ) {
$data = $memorycache[$username];
}
else {
$result = wp_remote_retrieve_body(wp_remote_request($url));
$data = json_decode( $result );
if ( is_object($data) )
$memorycache[$username] = $data;
}
if ( is_object($data) ) {
// update all fields, known to be requested
foreach ($cache[$username] as $key => $value)
if( isset($data->$key) )
$cache[$username][$key] = $data->$key;
$cache[$username]['lastcheck'] = time();
}
else {
$cache[$username]['lastcheck'] = time()+60;
}
update_option( ‘rarst_twitter_user’, $cache );
}
if ( false != $display )
echo $cache[$username][$field];
return $cache[$username][$field];
}
echo rarst_twitter_user(‘wpbeginner’, ‘name’).’ has ‘.
rarst_twitter_user(‘wpbeginner’, ‘followers_count’).’ followers after ‘.
rarst_twitter_user(‘wpbeginner’, ‘statuses_count’).’ updates.’;

29,禁用WordPress评论区的HTML

// This will occur when the comment is posted
function plc_comment_post( $incoming_comment ) {
// convert everything in a comment to display literally
$incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']);
// the one exception is single quotes, which cannot be #039; because WordPress marks it as spam
$incoming_comment['comment_content'] = str_replace( “‘”, ‘&amp;apos;’, $incoming_comment['comment_content'] );
return( $incoming_comment );
}
// This will occur before a comment is displayed
function plc_comment_display( $comment_to_display ) {
// Put the single quotes back in
$comment_to_display = str_replace( ‘&amp;apos;’, “‘”, $comment_to_display );
return $comment_to_display;

30,防止 WordPress 遭受恶意 URL 请求

/* Plugin Name: Block Bad Queries */
if (strlen($_SERVER['REQUEST_URI']) > 255 ||
strpos($_SERVER['REQUEST_URI'], “eval(“) ||
strpos($_SERVER['REQUEST_URI'], “base64″)) {
@header(“HTTP/1.1 414 Request-URI Too Long”);
@header(“Status: 414 Request-URI Too Long”);
@header(“Connection: Close”);
@exit;
}

31,在WordPress编辑器中添加内容

add_filter( ‘default_content’, ‘my_editor_content’ );
function my_editor_content( $content ) {
$content = “Hello World!”;
return $content;
}

32,把 WordPress 自定义日志类型添加到 Feed

add_filter(‘pre_get_posts’, ‘add_microblog_2_feed’ );
function add_microblog_2_feed( $query ) {
if ( is_feed()){
$query->set(‘post_type’, array( ‘post’, ‘m’));
}
return $query;
}

33,如何获取日志内容的第一段

function get_first_p($post){
//如果是使用 Windows Live Writer 这些工具写日志,可能使用<p>和</p>进行分段
if(preg_match(‘/<p>(.*)</p>/iU’,trim(strip_tags($post->post_content,”<p>”)),$matches)){
return $matches[1];
} else {
//如果直接在 WordPress 写日志,使用换行符(n)来分段
$post_content = explode(“n”,trim(strip_tags($post->post_content)));
return $post_content ['0'];
}
}

34,自动替换Dropbox的外链地址

// 自动替换Dropbox的外链地址
function replace_dropbox($content) {
return preg_replace(‘/https?://dl.dropbox.com/+/i’,'https://dl-web.dropbox.com/’,$content);
}
add_filter(‘the_content’, ‘replace_dropbox’);
//禁用半角符号自动转换为全角
remove_filter(‘the_content’, ‘wptexturize’);

35,Wordpress 去掉评论中链接

add_filter(‘comment_text’, ‘no_url_text’, 10);
function no_url_text($text = ”){
$text = preg_replace(“/<a[^>]*href=[^>]*>|</[^a]*a[^>]*>/i”,”",$text);
echo $text;
}

36,防止他人冒充自己

/**
* when comment check the comment_author comment_author_email
* @param unknown_type $comment_author
* @param unknown_type $comment_author_email
* @return unknown_type
*/
function CheckEmailAndName(){
global $wpdb;
$comment_author       = ( isset($_POST['author']) )  ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
if(!$comment_author || !$comment_author_email){
return;
}
$result_set = $wpdb->get_results(“SELECT display_name, user_email FROM $wpdb->users WHERE display_name = ‘” . $comment_author . “‘ OR user_email = ‘” . $comment_author_email . “‘”);
if ($result_set) {
if ($result_set[0]->display_name == $comment_author){
$errorMessage =  __(‘警告: 您不能用这个昵称,因为这是我的名字!乖,不要捣乱(*^__^*)……’);
}else{
$errorMessage = __(‘警告: 您不能使用该邮箱地址,因为这是我的邮箱!乖,不要捣乱(*^__^*)……’);
}
fail($errorMessage);
}
}
add_action(‘pre_comment_on_post’, ‘CheckEmailAndName’);

原文:wpbeginner

如无特别说明,本站文章皆为原创,若要转载,必须注明以下原文信息:
日志标题: 《25+个非常有用的WordPress主题函数使用技巧》
日志链接: http://www.chenchunlin.info/25-extremely-useful-tricks-for-the-wordpress-functions-file.html
博客名称: Chenchunlinblog

This entry was posted in WordPress and tagged , . Bookmark the permalink. Comments are closed, but you can leave a trackback: Trackback URL.

2 Trackbacks

  1. [...] Fast WordPress Search也是一款能够替换WordPress默认搜索功能的插件,使用这款插件,返回的结果会更加精确,相关性更加强,速度也会快一些。插件处理搜索的过程结合利用了WordPress庞大的function函数空间,能够有效减少数据库查询次数,搜索结果返回速度更快,足以应付密集型的搜索行为。插件安装时会附带一个用以比较搜索时间的标准工具,借此,我们就可以知道搜索速度的快慢。 [...]

  2. [...] the first clarify this point, beating heart so that we have at the end, ah, to continue, will This following function to join theme file functions.php [...]