WordPress去掉分类目录链接中的category最有效的方法
直接贴代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /* *WordPress去除category */ 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 ; } |
将上面代码加到主题functions.php中?>前保存,回到后台固定链接设置点击“保存更改”两次。
如果前台分类目录页面不能访问,就再固定链接设置更新下;
回到目录页面就能看到链接中的category被去除了,访问原来带category链接也会跳转到新链接上。
去除分类目录中category的相关文章
一、wordpress去掉链接中category【不用插件】
此方法在有些主题中不管用,会出错!
二、WordPress去除目录链接中category,原链接301重定向
如果使用了其他的代码后,原带category链接还能访问可按上文章设置重定向
更多WordPress链接URL优化:wordpress url优化
建议去除目录页面中的category后,目录页面和单页面链接结尾加上/就更完美了!
WordPress分类目录和页面链接后面添加斜杠/
我直接用的WP No Category Base插件,没修改代码,也去掉了,挺方便的
现在好多人都是找代码实现的,好多主题都自带了WP No Category Base的效果
添加后白屏
将上面代码加到主题functions.php中?>前保存,回到后台固定链接设置点击“保存更改”两次。
对了,aibing,我搬迁了,然后更换域名,用这方法不行,是不是哪里还要修改?
因为只有默认的可以用
是加在functions.php文件里么?上门代码是用的No Category Base插件中的代码,我用了几次都能成功去Category的,要不你直接用No Category Base插件吧