自定义WordPress后台用户联系方式

在 WordPress 后台,个人设置(Profile)中,除了可以设置电子邮件和 Website 之外,还可以设置自己的联系方式

只需要调用下 custom_contactmethods 这个 WordPress Filter 既可以实现在后台支持常用的 QQ, 微信等联系方式,代码如下,加在funcitons.php:

add_filter('user_contactmethods','customContact');
function customContact($user_contactmethods ){
  $user_contactmethods = array(
    'qq' => 'QQ',
    'wechat' => '微信'
  );
  return $user_contactmethods ;
}

WordPress内置文章缩略图功能(Post Thumbnail)

1. 激活文章缩略图功能

要激活该功能,打开你主题的functions.php文件,输入下面的代码:

add_theme_support( 'post-thumbnails' );

你也可以添加一个参数来指定在post还是page激活该功能:

add_theme_support( 'post-thumbnails', array( 'post', 'page' ) );

2.输出到主题

要在你的主题中显示出设置的图片,你需要在loop里面添加下面这个函数:

<?php the_post_thumbnail(); ?>

你可以给该函数传递一个参数值来调用图片的不同尺寸,

the_post_thumbnail(); // 默认显示缩略图
the_post_thumbnail('thumbnail'); // 显示缩略图
the_post_thumbnail('medium'); // 显示中等尺寸
the_post_thumbnail('large'); // 显示大尺寸
the_post_thumbnail( array(100,100) ); // 自定义尺寸图

3. 在loop外调用某篇文章的文章缩略

如果你想在loop以外调用某些文章的缩略图,另一个函数为你准备:

<?php echo get_the_post_thumbnail(); ?>

和the_post_thumbnail()相比,它需要再传入一个参数来指定文章的ID:

get_the_post_thumbnail($id);
get_the_post_thumbnail($id, 'thumbnail');
get_the_post_thumbnail($id, 'medium');
get_the_post_thumbnail($id, 'large');
get_the_post_thumbnail($id, array(100,100) );

WordPress前台添加登陆框wp_login_form函数

使用这个wp_login_form函数还需要先判断用户是否登录,如果已经登陆了,肯定就不显示这个登陆框了。这里需要配合wordpress判断用户是否登录函数来一起使用。

<?php if ( is_user_logged_in() ) { ... } ?>

具体使用代码如下:

<?php if ( is_user_logged_in() ) : ?>
  <li>welcome, registered user!</li>
  <li><a href="<?php echo home_url();?>/wp-admin">wp admin</a></li>
  <li><a href="<?php echo home_url();?>/wp-admin/post-new.php">post new</a></li>
  <li><a href="<?php echo home_url();?>/wp-login.php?action=logout">log out</a></li>
<?php else : ?>
  <li>welcome, visitor!</li>
  <li><?php wp_login_form('label_username=用户'); ?></li>
<?php endif ?>

启用WordPress 3.0的多站点支持功能

在 WordPress 3.0 开工的时候,就已经正式对外公布了本次更新最大的一个亮点,就是将 WordPress MU 与 WordPress 进行功能上的合并。这也就意味着,从 3.0 开始,WordPress 将真正意义上的支持多用户、多站点功能。

这几天,WordPress 3.0 的第一个 Beta 版本也对外发布了,虽然还处于紧张的开发调试阶段,但大家不妨先行进行一些测试。也好为以后的开发工作积累一些经验。

3.0 的多站点(Multisite)功能从最开始合并完毕后,直接可以在后台点击激活,到现在需要经过一些配置才可以使用,估计是考虑到某些用户可能会误点击而导致不必要的麻烦发生。

下面就介绍一下如何激活 WordPress 3.0 的多站点支持功能:

第一步,当然是下载最新版的 WordPress 程序,并进行安装。和以前的安装步骤并没有什么区别。

第二步,将以下代码加入到 wp-config.php 文件当中:

define ('WP_ALLOW_MULTISITE', true );

第三步,在 wp-content 目录中创建一个 blogs.dir 目录,用于存储子站点用户上传数据。

第四步,在后台的“Tools”(工具)菜单中会多出一个“Network”(网络)的项目。点击进入……

第五步,根据页面提示,对 wp-config.php 文件进行修改。(切记,修改前请备份。)

第六步,根据页面提示,覆盖 .htaccess 文件中的内容。(切记,修改前请备份。)

好了,通过以上六步的设置,现在刷新一下后台,也许会要求重新登陆。看一下原来左侧的导航栏上,是不是多出来一个“Super Admin”(超级管理)的栏目?点击里面各个功能项,如果您之前使用过 MU,您一定会觉得特别亲切。

在启用多站点功能之前,有几点需要大家注意:

第一,做好 wp-config.php 文件和 .htaccess 文件的备份。只要备份在手,恢复到单站点模式将易如反掌。

第二,在启用之前,请尽量将站点链接形式从默认形式改为其他形式。

第三,您的主机必须支持 Rewrite 功能。否则,您看到这里,属于浪费时间。

WordPress页面跳转到网址

最简单的方法就是在导航菜单里直接加入一个链接就行了。

下面给出的方法实现的功能是在页面的内容里输入一个网址,然后页面自动跳转到这个网址。

一、主题文件夹下新建一个page-redirect.php文件,文件内容如下

<?php
/*
Template Name:page redirect
*/
header('Location:'.$post->post_content);
?>

二、在后台控制面板新建一个页面,标题根据你的需要填写,比如“WordPress中文论坛”。内容输入需要跳转的网址,比如 http://www.wpcnz.com ,模板选择”page redirect”。然后发布即可。

巧用WordPress缩略图

WordPress 不仅是博客, 很多时候 WordPress 还被用作为 CMS (内容管理系统).博主们喜欢为每个文章加上统一大小的缩略图, 尤其是信息类平台. 其中比较常用的处理办法是用 custom field 向文章插入图片,通过上传大小一致的小图或者使用 phpThumb 等工具生成缩略图.

2.7 开始, WordPress 大幅提升多媒体功能, 越来越多人使用 WP 的内置图片仓库. 对这些用户来说,制作缩略图变得并不那么困难, 在上传图片的时候就会默认生成 150×150 规格的小图 (如果图片高度/宽度不足 150px,使用原高度/宽度). 那我们可以充分利用这个功能, 在文章列表上加上这个图片作为缩略图. 这样处理各有利弊, 好处是简单, 智能(不用每次输入缩略图), 坏处是消耗服务器流量.

Okay, 现在要做的就是提取上传生成的小图片, 并放置在文章的适当位置. 我创建了一个文件 thumb.php, 图片获取和调用一起处理, 文件内容如下.

<?php
$args = array(
  'post_parent' => $post->ID,
  'post_type' => 'attachment',
  'post_mime_type' => 'image'
);
  
$images = &get_children( 'post_type=attachment&post_mime_type=image&post_parent=' . $post->ID );
$imageUrl = '';
  
if ($images) {
  $image = array_pop($images);
  $imageSrc = wp_get_attachment_image_src($image->ID);
  $imageUrl = $imageSrc[0];
}else{
  $imageUrl = get_bloginfo('template_url') . '/img/default.gif';
}
?>
<a href="<?php the_permalink() ?>"><img class="left" src="<?php echo $imageUrl; ?>" alt="<?php the_title(); ?>" width="150" height="150" /></a>

这段代码会去找第一个上传的图片 的缩略图 (如果第一个图片被删除, 则找第二个的, 如此类推…),如果找不到任何上传图片则使用默认图片. 代码中用到 get_children 和 wp_get_attachment_image_src两个方法

然后在文章列表 index.php, 存档页面 archive.php 和搜索页面 search.php 中调用, 调用代码如下.

<?php include('thumb.php'); the_content('Read More...'); ?>

WordPress非插件版页面分页

使用WordPress的朋友都知道,它的分页采用的是“上一页、下一页”的方式,对于文章太多的朋友不是太方面,当然你可以使用一些翻页的插件来实现如 “pages:1 of 10 1 2 3 4 …”的效果,本人一直都不太喜欢使用插件,正好手头有个不错的方法来实现。

1. 打开你主题模板的functions.php,在里面添加以下代码:

<?php
function wp_pagenavi($before = '', $after = '', $prelabel = '', $nxtlabel = '', $pages_to_show = 5, $always_show = false){
    global $request, $posts_per_page, $wpdb, $paged;
    if (empty($prelabel)) {
        $prelabel = '<strong>上一页</strong>';
    }
    if (empty($nxtlabel)) {
        $nxtlabel = '<strong>下一页</strong>';
    }
    $half_pages_to_show = round($pages_to_show / 2);
    if (!is_single()) {
        if (!is_category()) {
            preg_match('#FROM\\s(.*)\\sORDER BY#siU', $request, $matches);
        } else {
            preg_match('#FROM\\s(.*)\\sGROUP BY#siU', $request, $matches);
        }
        $fromwhere = $matches[1];
        $numposts = $wpdb->get_var("SELECT COUNT(DISTINCT ID) FROM {$fromwhere}");
        $max_page = ceil($numposts / $posts_per_page);
        if (empty($paged)) {
            $paged = 1;
        }
        if ($max_page > 1 || $always_show) {
            echo "{$before} <div class='pagers'><span>当前第 {$paged} / {$max_page} 页 : </span>";
            if ($paged >= $pages_to_show - 1) {
                echo '<a href="' . get_pagenum_link() . '">&laquo; 首页</a>';
            }
            previous_posts_link($prelabel);
            for ($i = $paged - $half_pages_to_show; $i <= $paged + $half_pages_to_show; $i++) {
                if ($i >= 1 && $i <= $max_page) {
                    if ($i == $paged) {
                        echo "<strong>{$i}</strong>";
                    } else {
                        echo '<a href="' . get_pagenum_link($i) . '">' . $i . '</a>';
                    }
                }
            }
            next_posts_link($nxtlabel, $max_page);
            if ($paged + $half_pages_to_show < $max_page) {
                echo '<a href="' . get_pagenum_link($max_page) . '">最后 &raquo;</a>';
            }
            echo "</div> {$after}";
        }
    }
}?>

2. 在index.php archive.php等需要分页的地方使用

<?php wp_pagenavi(); ?>

替换掉

<?php previous_post_link('上一篇: %link'); ?>
<?php next_post_link('%link :下一篇'); ?>

CSS样式

.pagers{height:25px;color:#111;padding:2px 0;margin:0;text-align:center;}
.pagers a,.pagers strong{margin:0 2px;padding:2px 5px;}
.pagers a{border:1px solid #6c8c37}
.pagers strong{border:1px solid #111}

WordPress显示同个父页面的其他子页面的链接

假设以下情况,有一个父页面,然后它有一些子页面。当你打开父页面的时候,你想在 sidebar 显示它的子页面的链接。当你打开子页面链接的时候,你还是想要显示同样一组链接。但问题是,你现在想显示的是相同父页面的其他子页面。你不能通过一个简单函数就能解决这个问题。下面是详细解决方法:

<?php
if($post->post_parent)
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
else
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
if ($children) {
  echo '<ul>';
  echo $children;
  echo '</ul>';
} ?>

WordPress使用自定义字段来显示日志缩略图

下面是实现使用自定义字段来显示日志缩略图的详细步骤:

1. 首先你应该能够上传图片到你的服务器,你可以通过 FTP 工具或者在 WordPress 后台通过其他任何 WordPress 插件上传图片。

2. 在撰写新日志的页面,向下滚动到一个叫做自定义字段(Custom Fields)的地方,点击按钮展开它。

3. 在 Key 字段输入 “image_thumb”,然后在 “Value” 字段输入你刚才上传的图片的 URL。

4. 然后继续你写日志的常规动作,增加标题,输入内容,选择分类,最后发布。

5. 现在打开你当前主题的 index.php 文件,搜索到下面这行:

<?php the_content('Read the rest of this entry &raquo;'); ?>

这上面这行之前添加以下代码:

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><img src="<?php $values = get_post_custom_values("image_thumb"); echo $values[0]; ?>" alt="<?php the_title(); ?>" /></a>

WordPress内置模板条件判断函数

<?php if ( is_home() ) { ?>//判断是否首页<?php } ?>
<?php if ( is_single() ) { ?>//判断是否文章页<?php } ?>
<?php if ( is_single('17') ) { ?>//判断是否ID为17的文章页<?php } ?>
<?php if ( is_single('Beef Stew') ) { ?>//判断标题是否为 Beef Stew 的文章页<?php } ?>
<?php if ( comments_open() ) { ?>//当前页是否允许回复<?php } ?>
<?php if ( pings_open() ) { ?>//是否开启 ping<?php } ?>
<?php if ( is_page() ) { ?>//是否是一个页面<?php } ?>
<?php if ( is_category() ) { ?>//判断是否为分类页面<?php } ?>
<?php if ( is_tag() ) { ?>//是否TAG页面;可以用 is_tag('tagname') 判断具体的TAG<?php } ?>
<?php if ( is_author() ) { ?>//是否某个用户的文章;可以加入用户ID,或用户名作为参数<?php } ?>
<?php if ( is_archive() ) { ?>//判断是否存档<?php } ?>
<?php if ( is_search() ) { ?>//判断是否搜索<?php } ?>
<?php if ( is_404() ) { ?>//判断是否404页面<?php } ?>
<?php if ( is_paged() ) { ?>//判断是否翻页<?php } ?>

例如,一个只需要在首页显示的可以用一下语句解决:

<?php if(is_home() && !is_paged()){?>
...
<?php }?>

一个不在首页显示的,例如“最近发表文章”的插件可以加一个

<?php if(!is_home()){?>
// 避免首页内容和插件内容重复。
<?php }?>