建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

WordPress主题开发教程十三:存档和链接列表(将WordPress作者存档链接中的用户名改为用户ID的方法)

GG网络技术分享 2025-03-18 16:12 2


WordPress主题开发教程十三:存档和链接列表

这篇将比较简单,讲解如何调用存档链接列表和友情链接(blogroll)列表。

第1步 – 增加存档链接列表。

在侧边栏区域的 Categories 列表下面输入以下代码:

<li><h2><?php _e(’Archives’); ?></h2>
<ul>
<?php wp_get_archives(’type=monthly’); ?>
</ul>
</li>

复制之后检查下代码是否和下面一样:

保存并刷新浏览器。结果如下所示:

发生什么了?

我们使用了 wp_get_arhives() 这个 PHP 函数,并用了 type 这个参数以及 monthly作为它的值,这样就按月调用存档链接列表。

  • <li> – 开始列表元素
  • <h2> – 开始子标题
  • <?php _e(’Archives’); ?> – 的标题文本
  • </h2> – 结束子标题
  • <ul> – 开始在存档链接这个无序列表
  • <?php wp_get_archives(’type=monthly’); ?> – 按月调用存档列表链接,并把每个链接放入 <li></li> 标签中。如果查看源代码,我们会看到wp_get_archives() 为每个链接产生了列表元素(LI)标签,就像 wp_list_cats()这个函数一样。
  • </ul> – 结束在子标题下的无序列表
  • </li> – 结束列表元素

第2步:增加友情链接列表

在存档链接列表下输入以下代码:

<?php get_links_list(); ?>

保存并刷新,结果如下:

默认情况下,我的 blogroll 和你想的是没有什么不同,这里是它在源代码中的样子:

上面的代码完全没有正确地被缩进,因为它们是由函数组成 get_links_list() 产生的,就像上一篇所学的函数一样 wp_list_pages() 产生的代码一样,但是它遵循规则 #1,按正确顺序关闭所有的东西。我已经圈出了元素和无序列表的标签让你看得更明显。

将WordPress作者存档链接中的用户名改为用户ID的方法

不少朋友都在询问,如果将WordPress作者存档链接中的用户名改为用户ID,好吧,一起来看看将WordPress作者存档链接中的用户名改为用户ID的方法。

什么是作者存档页链接

wordpress的里的所有注册用户都有一个专属的链接,称之为作者存档页链接,通常是这样的:

// 未url重写

http://qianduanblog.com/?author=1

// 已url重写

http://qianduanblog.com/author/admin

其中未url重写的参数值是用户id,而url重写后的参数值是用户名。通常,我们都使用了url重写,而作者存档页链接暴露了用户名,可能对wordpress的安全性有点点倾斜(而作者的想法是作者的的参数值统一为用户id,如:author/123,用户页面链接的参数值统一为用户id,如:user/123,关于用户页面链接比作者存档页链接要复杂,后续文章再说),所以我们需要修改参数值为用户id。

修改作者存档页链接

首先要做的是,修改存档页链接,如下示例:

// 修改之前

http://qianduanblog.com/author/admin

// 修改之后

http://qianduanblog.com/author/123

在wordpress里内置了关于作者存档页链接的钩子,原始的作者存档页链接是这样获取的:

/**

* Retrieve the URL to the author page for the user with the ID provided.

*

* @since 2.1.0

* @uses $wp_rewrite WP_Rewrite

* @return string The URL to the author\'s page.

*/

function get_author_posts_url($author_id, $author_nicename = \'\') {

global $wp_rewrite;

$auth_ID = (int) $author_id;

$link = $wp_rewrite->get_author_permastruct();

if ( empty($link) ) {

$file = home_url( \'/\' );

$link = $file . \'?author=\' . $auth_ID;

} else {

if ( \'\' == $author_nicename ) {

$user = get_userdata($author_id);

if ( !empty($user->user_nicename) )

$author_nicename = $user->user_nicename;

}

$link = str_replace(\'%author%\', $author_nicename, $link);

$link = home_url( user_trailingslashit( $link ) );

}

$link = apply_filters(\'author_link\', $link, $author_id, $author_nicename);

return $link;

}
参考源文档,生成了这样的用户id的作者存档页链接: 

/**

* 修改url重写后的作者存档页的链接变量

* @since yundanran-3 beta 2

* 2013年10月8日23:23:49

*/

add_filter( \'author_link\', \'yundanran_author_link\', 10, 2 );

function yundanran_author_link( $link, $author_id) {

global $wp_rewrite;

$author_id = (int) $author_id;

$link = $wp_rewrite->get_author_permastruct();

if ( empty($link) ) {

$file = home_url( \'/\' );

$link = $file . \'?author=\' . $author_id;

} else {

$link = str_replace(\'%author%\', $author_id, $link);

$link = home_url( user_trailingslashit( $link ) );

}

return $link;

}

修改之后,在前台输出作者存档页的链接:

get_author_posts_url(1);

// =>http://qianduanblog.com/author/1

说明钩子使用的是正确的,但当我们打开这个链接的时候,出现了404。这是因为,原始的作者存档页链接的url重写规则是根据用户名来的,而现在修改为了用户id,重写规则不匹配,出现了404。

修改作者存档页查询变量

为了避免出现404,我们需要修改作者存档页的url重写规则。

/**

* 替换作者的存档页的用户名,防止被其他用途

* 作者存档页链接有2个查询变量,

* 一个是author(作者用户id),用于未url重写

* 另一个是author_name(作者用户名),用于url重写

* 此处做的是,在url重写之后,把author_name替换为author

* @version 1.0

* @since yundanran-3 beta 2

* 2013年10月8日23:19:13

* @link https://www.wpdaxue.com/use-nickname-for-author-slug.html

*/

add_filter( \'request\', \'yundanran_author_link_request\' );

function yundanran_author_link_request( $query_vars ) {

if ( array_key_exists( \'author_name\', $query_vars ) ) {

global $wpdb;

$author_id=$query_vars[\'author_name\'];

if ( $author_id ) {

$query_vars[\'author\'] = $author_id;

unset( $query_vars[\'author_name\'] );

}

}

return $query_vars;

}

很巧合的是,作者存档页的查询变量有2个,之前说过,1个是url未重写的用户id(author),另一个是url已重写的用户名(author_name),而现在直接传递过来了用户id,只需要把参数名称author_name修改为author即可。

再次打开刚才的链接(http://qianduanblog.com/author/1),出现了正确页面。而如果打开原始的链接(http://qianduanblog.com/author/admin)就会出现404页面了,说明我们的修改正确了。

标签:

提交需求或反馈

Demand feedback