如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接

一个新网站需要结合SEO,才能做成一个优秀的网站,

◆◆◆ 关于WordPress的分类目录url中含有category的处理办法:

1,如果是新网站这些设置需要提前做,方便以后做SEO

1、修改固定链接设置

打开WP后台-设置-固定链接

自定义结构,可以依据对SEO友好设置url
如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接_第1张图片

温馨提示:在分类目录那一栏里写入英文半角的点,此时得需要你的网站是全新的,没有分类栏目和文章,这样才不会出错,如果已有文章,这样的方法会使你的文章和分类栏目不存在
2.借助Wordpress插件

使用插件“WP No Category Base”插件

3.WP No category Base 插件的主体代码插入到function.php中(不使用插件,只放代码在后台)

//去除分类标志代码
add_action( 'load-themes.php',  'no_category_base_refresh_rules');
 add_action('created_category', 'no_category_base_refresh_rules');
 add_action('edited_category', 'no_category_base_refresh_rules');
 add_action('delete_category', 'no_category_base_refresh_rules');
 function no_category_base_refresh_rules() {
     global $wp_rewrite;
     $wp_rewrite -> flush_rules();
 }
 // register_deactivation_hook(__FILE__, 'no_category_base_deactivate');
 // function no_category_base_deactivate() {
 //  remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
 //  // We don't want to insert our custom rules again
 //  no_category_base_refresh_rules();
 // }
 // Remove category base
 add_action('init', 'no_category_base_permastruct');
 function no_category_base_permastruct() {
     global $wp_rewrite, $wp_version;
     if (version_compare($wp_version, '3.4', '<')) {
         // For pre-3.4 support
         $wp_rewrite -> extra_permastructs['category'][0] = '%category%';
     } else {
         $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
     }
 }
 // Add our custom category rewrite rules
 add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
 function no_category_base_rewrite_rules($category_rewrite) {
     //var_dump($category_rewrite); // For Debugging
     $category_rewrite = array();
     $categories = get_categories(array('hide_empty' => false));
     foreach ($categories as $category) {
         $category_nicename = $category -> slug;
         if ($category -> parent == $category -> cat_ID)// recursive recursion
             $category -> parent = 0;
         elseif ($category -> parent != 0)
             $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename;
         $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
         $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
         $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]';
     }
     // Redirect support from Old Category Base
     global $wp_rewrite;
     $old_category_base = get_option('category_base') ? get_option('category_base') : 'category';
     $old_category_base = trim($old_category_base, '/');
     $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';
     //var_dump($category_rewrite); // For Debugging
     return $category_rewrite;
 }
 // Add 'category_redirect' query variable
 add_filter('query_vars', 'no_category_base_query_vars');
 function no_category_base_query_vars($public_query_vars) {
     $public_query_vars[] = 'category_redirect';
     return $public_query_vars;
 }
 // Redirect if 'category_redirect' is set
 add_filter('request', 'no_category_base_request');
 function no_category_base_request($query_vars) {
     //print_r($query_vars); // For Debugging
     if (isset($query_vars['category_redirect'])) {
         $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');
         status_header(301);
         header("Location: $catlink");
         exit();
     }
     return $query_vars;
 }

 ◆◆◆WordPress会生成很多作者链接
   因为wp有一个作者归档的模板文件

  wordpress作者的相关函数调用代码

 显示文章的作者  
2. 显示文章作者的描述(作者个人资料中的描述)  
3. 显示文章作者的登录名  
4. 显示文章作者的firstname(名)  
5. 显示文章作者的lastname(姓)  
6. 显示文章作者的昵称  
7. 显示文章作者的ID号  
8. 显示文章作者的电子邮箱  
9. 显示文章作者的网站地址  
10.(添加于2.1版本) 显示一个以文章作者名为链接名,链接地址为文章作者的网址的链接。  
11. (不推荐使用) 显示文章作者的icq  
12. 显示文章作者的aim  
13. 显示文章作者的yim  
14. (不推荐使用) 显示文章作者的msn  
15. 显示文章作者已发表文章的篇数  
16. 显示一个链接到文章作者已发表文章列表的链接  
17. (不推荐使用) 显示blog所有作者和他们的相关信息。完整函数如下:  

1. 一个不错的解决方法是将WordPress作者存档链接中的用户名改为昵称。
修改方法如下:

/**
 * 将WordPress作者存档链接中的用户名改为昵称
 * https://www.wpdaxue.com/use-nickname-for-author-slug.html
 */
//使用昵称替换用户名,通过用户ID进行查询
add_filter( 'request', 'wpdaxue_request' );
function wpdaxue_request( $query_vars )
{
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );    
        }
    }
    return $query_vars;
}
 
//使用昵称替换链接中的用户名
add_filter( 'author_link', 'wpdaxue_author_link', 10, 3 );
function wpdaxue_author_link( $link, $author_id, $author_nicename )
{
    $author_nickname = get_user_meta( $author_id, 'nickname', true );
    if ( $author_nickname ) {
        $link = str_replace( $author_nicename, $author_nickname, $link );
    }
    return $link;
}

如果不希望蜘蛛爬取这些链接:给作者链接添加nofollow

打开wp-includes/author-template.php
查找‘%3$s',只需加个nofollow标签,例如:'%3$s'

2.更改wordpress主题内的function.php文件,在php循环内增加如下代码:

//给 the_author_post_link 生成的链接加上 rel="nofollow"

add_filter('the_author_posts_link','cis_nofollow_the_author_posts_link');

function cis_nofollow_the_author_posts_link ($link) {

return str_replace('