zoukankan      html  css  js  c++  java
  • 如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接

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

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

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

    1、修改固定链接设置

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

    自定义结构,可以依据对SEO友好设置url

    温馨提示:在分类目录那一栏里写入英文半角的点,此时得需要你的网站是全新的,没有分类栏目和文章,这样才不会出错,如果已有文章,这样的方法会使你的文章和分类栏目不存在
    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作者的相关函数调用代码

    <?php the_author(); ?> 显示文章的作者  
    2.<?php the_author_description(); ?> 显示文章作者的描述(作者个人资料中的描述)  
    3.<?php the_author_login(); ?> 显示文章作者的登录名  
    4.<?php the_author_firstname(); ?> 显示文章作者的firstname(名)  
    5.<?php the_author_lastname(); ?> 显示文章作者的lastname(姓)  
    6.<?php the_author_nickname(); ?> 显示文章作者的昵称  
    7.<?php the_author_ID(); ?> 显示文章作者的ID号  
    8.<?php the_author_email(); ?> 显示文章作者的电子邮箱  
    9.<?php the_author_url(); ?> 显示文章作者的网站地址  
    10.<?php the_author_link (); ?>(添加于2.1版本) 显示一个以文章作者名为链接名,链接地址为文章作者的网址的链接。  
    11.<?php the_author_icq(); ?> (不推荐使用) 显示文章作者的icq  
    12.<?php the_author_aim(); ?> 显示文章作者的aim  
    13.<?php the_author_yim(); ?> 显示文章作者的yim  
    14.<?php the_author_msn(); ?> (不推荐使用) 显示文章作者的msn  
    15.<?php the_author_posts(); ?> 显示文章作者已发表文章的篇数  
    16.<?php the_author_posts_link(); ?> 显示一个链接到文章作者已发表文章列表的链接  
    17.<?php list_authors(); ?> (不推荐使用) 显示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
    查找‘<a href="%1$s" title="%2$s">%3$s</a>',只需加个nofollow标签,例如:'<a href="%1$s" title="%2$s" rel="nofollow">%3$s</a>'

    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('<a href=','<a rel="nofollow" href=', $link);
    
    }
    

    更改/移除WordPress作者存档页面的前缀“author”

    3.可以在根目录下新建一个作者页面author.php  

      


      

     

  • 相关阅读:
    Socket 传送文件
    spring
    Hibernate学习笔记
    servlet之过滤器(转载)
    java 网络编程
    java 文件操作
    java 图形界面 邮件系统
    简易俄罗斯方块
    二叉树习题之重建二叉树
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/cheryshi/p/7693035.html
Copyright © 2011-2022 走看看