设置作者页面

0条评论

设置作者页面

WordPress 1.5引入“主题”功能后,用户可以轻松地为自己的博客改头换面。例如,访问者点击某篇博客日志的作者链接时,默认情况下浏览器会跳转到该作者的日志页面,所有日志按时间顺序排列,列表最上方是最新日志,最下方则是发表时间最早的日志。我们可以用不同的方式来显示这些日志,可以显示整篇文章内容,也可以只显示摘要,还可以显示一些其它信息(比如标题、类别、发表日期、最后修改时间等)。每个主题对作者页面的设置都有所不同,有时我们可能希望改变所用主题对作者页面的设置。

本文将向大家介绍怎样对访问者点击博客作者时所显示的页面进行设置,其中涉及主题和模板文件的使用,不了解主题和模板文件的用户可以参考WordPress主题的使用初识WordPress模板

我们可以通过很多方式更改作者页面。有些方法不仅仅用于作者页面,比如在页面上方添加文本;设置分类页面中介绍了这种简单的修改方法。这里主要介绍专用于作者页面的方法。

基本原理

从日志中链接到作者页面

如果要使用作者页面,首先要求显示的日志中有作者页面的链接。我们可以用the_author_posts_link()WordPress主循环中生成作者页面链接:

<p>Written by: 
<?php the_author_posts_link(); ?></p>

注意: 自WP 2.1起, the_author_link() 不再链接到作者页面——它链接到了作者个人资料中的URL。 目前the_author_link() 是唯一一个能链接到标准的、由WP生成的作者页面的函数。

带有相应链接的作者列表

在侧边栏(或者主题的其它地方)中列出作者列表,这也是一种生成作者页面的方式。用模板标签wp_list_authors()可以完成这一任务。我们只要将以下代码放入侧边栏模板文件:

<h2>List of authors:</h2>
<ul>
<?php wp_list_authors(); ?>
</ul>

我们还可以用wp_list_authors()中的参数来更改作者列表的显示方式。例如,默认情况下不显示管理员账号(用户名“admin”),但我们可以用以下代码来强制 wp_list_authors() 显示管理员账号:

<ul>
<?php wp_list_authors('exclude_admin=0'); ?>
</ul>

我们还可以把参数联合起来。默认情况下列表中不显示没有发表日志的作者,但在此例中,列表会显示包括管理员在内的所有作者(用户)。

注意:WordPress 2.1.2使用exclude_admin函数,但这和设置 hide_empty=0无关。将 hide_empty 设为0也能将管理员账号包含在作者列表中。

<ul>
<?php wp_list_authors('exclude_admin=0&hide_empty=0'); ?>
</ul>

其它设置参见wp_list_authors()

对模板文件的选择

链接到作者页面之后,下一步就该考虑用哪一个主题文件来显示日志了,这就是所谓的模板层级

作者页面的层级相对简单。根据模板层级的规定,WordPress会在当前主题文件中按顺序查找以下三个文件,选择最先查找到的模板文件进行操作:

  1. author.php
  2. archive.php
  3. index.php

也就是说,如果没有author.php文件,WordPress会继续查找archive.php文件,以此类推。

因此如果我们要更改作者页面的外观,首先需要复制archive.php中的内容来创建author.php文件(如果author.php文件尚不存在),如果archive.php文件不存在,那我们首先要复制index.php文件的内容来创建archive.php文件。下面假设我们需要编辑author.php文件。

自定义作者信息

本节内容向大家介绍如何在作者页面上添加作者的名称、自传、联系方式等资料。

设置作者资料

为了能在作者页面上显示相应的作者资料,我们首先要对作者模板文件(author.php)进行编辑,然后从数据库中查找关于该作者的所有信息(例如在WordPress用户管理界面中输入的信息)。

我们可以规定一个$curauth (当前作者)变量来完成以上任务。在模板文件的主循环前插入下列代码:

<?php 
if(isset($_GET['author_name'])) :
    // NOTE: 2.0 bug requires: get_userdatabylogin(get_the_author_login());
    $curauth = get_userdatabylogin($author_name);
else :
    $curauth = get_userdata(intval($author));
endif;
?>

如果上述办法不适用,我们还可以选择其它方式来接收查询以及为$curauth赋值。例如下面这段代码就能够在WordPress 1.2、WordPress 1.5以及更高版本中运行。

<?php
if(isset($_GET['author_name'])) :
    $curauth = get_userdatabylogin($_GET['author_name']);
else :
    $curauth = get_userdata($_GET['author']);
endif;
?>

也可以尝试下面这段适用于WordPress 1.5以及更高版本的代码:

<?php
if(get_query_var('author_name')) :
    $curauth = get_userdatabylogin(get_query_var('author_name'));
else :
    $curauth = get_userdata(get_query_var('author'));
endif;
?>

如果以上方法都不起作用,我们还有一个选择(适用于WordPress 1.5以及更高版本):

<?php
global $wp_query;
$curauth = $wp_query->get_queried_object();
?>

使用作者资料

设置好了 $curauth变量后我们就可以用它来显示当前作者页面上的作者信息了。例如,如果要显示作者的昵称,像是“This is Joe's page”(关于Joe),我们可以用以下代码:

<p>This is <?php echo $curauth->nickname; ?>'s page</p>  

注意:这行代码必须放在 $curauth定义(如上例所示)后,模板文件的主循环 前。

除了作者的昵称,我们还可以显示很多关于作者的资料。这些资料都来自WordPress用户编辑界面。在WordPress 2.0以及更高版本中,我们可以使用以下变量赋值:

  • $curauth->aim;
  • $curauth->description;
  • $curauth->display_name;
  • $curauth->first_name;
  • $curauth->ID;
  • $curauth->jabber;
  • $curauth->last_name;
  • $curauth->nickname;
  • $curauth->user_email;
  • $curauth->user_login;
  • $curauth->user_nicename;
  • $curauth->user_registered;
  • $curauth->user_url;
  • $curauth->yim;

在WordPress 1.2和WordPress 1.5版中可以使用以下变量赋值:

  • $curauth->user_aim;
  • $curauth->user_description;
  • $curauth->user_email;
  • $curauth->user_firstname;
  • $curauth->user_icq;
  • $curauth->user_lastname;
  • $curauth->user_level;
  • $curauth->user_login;
  • $curauth->user_msn;
  • $curauth->user_nickname;
  • $curauth->user_url;
  • $curauth->user_yim;

这些和上文中的昵称示例用法相同。例如,如果要显示作者的名称和相关说明(如“关于”页面),我们可以:

<p><?php echo $curauth->display_name; ?><br />
<?php echo $curauth->description; ?></p>

模板文件样例

下面是一个完整的author.php文件样例:

<?php get_header(); ?>

<div id="content" class="narrowcolumn">

<!-- This sets the $curauth variable -->

    <?php
    if(isset($_GET['author_name'])) :
        $curauth = get_userdatabylogin($author_name);
    else :
        $curauth = get_userdata(intval($author));
    endif;
    ?>

    <h2>About: <?php echo $curauth->nickname; ?></h2>
    <dl>
        <dt>Website</dt>
        <dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a>
</dd>
        <dt>Profile</dt>
        <dd><?php echo $curauth->user_description; ?></dd>
    </dl>

    <h2>Posts by <?php echo $curauth->nickname; ?>:</h2>

    <ul>
<!-- The Loop -->

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <li>
            <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php 
the_title(); ?>">
            <?php the_title(); ?></a>,
            <?php the_time('d M Y'); ?> in <?php the_category('&');?>
        </li>

    <?php endwhile; else: ?>
        <p><?php _e('No posts by this author.'); ?></p>

    <?php endif; ?>

<!-- End Loop -->

    </ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>