wordpress CMS主题 微信
Home > wordpress CMS主题制作 > wordpress主题如何去除分类目录URL中的category?

wordpress主题如何去除分类目录URL中的category?

高时银博客 wordpress CMS主题制作 点击: 2,102 次 0 0
  • 标签:
  • 在我们为wordpress同站伪静态并设置固定链接时,会发现,分类目录的URL地址中间会多出一个category,如:wanlimm.com/category/wordpress-theme ,为了利于SEO优化,我们一般都会希望地址URL越短越好,如:wanlimm.com/wordpress-theme,这时,就需要我们把中间的category去除。那么,如何去除掉这个category呢?

    方法一:直接在后台的固定链接里设置。

    后台——> 设置 ——> 固定链接 ——> 分类目录前缀 ,在“分类目录前缀”后面的表单中添加一个英文句号就可以了。这种方法有时能成功,但有时会在前台打开分类目录时会出现404错误。

    方法二:插件来实现。这方面的插件好像也不少。如:wp-no-category-base 。

    方法三:php代码实现。代码如下:

    //去除分类目录URL中的/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();
    }
    add_action('init', 'no_category_base_permastruct');
    function no_category_base_permastruct() {
    global $wp_rewrite, $wp_version;
    if (version_compare($wp_version, '3.4', '<')) {

    $wp_rewrite -> extra_permastructs['category'][0] = '%category%';
    } else {
    $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
    }
    }
    add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
    function no_category_base_rewrite_rules($category_rewrite) {
    $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]';
    }
    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]';

    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) {
    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主题的functions.php文件中,然后设置伪静态及固定链接,就可以了。


    文章作者:高时银博客
    本文地址:http://wanlimm.com/77201601124963.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    目前还没有评论。赶快来坐沙发吧。

    发表评论