Xóa danh mục cha mẹ khỏi permalink? Về cơ bản chỉ có thể loại con?


7

Tôi nghĩ đã từng có một plugin lỗi thời để làm điều này. Có cách nào để làm điều này dễ dàng chỉ với một ít mã? Chúng tôi không muốn phụ thuộc vào plugin vì điều đó khiến chúng tôi phụ thuộc vào nhà phát triển để luôn cập nhật.

Chúng tôi chỉ có hai danh mục chính mà chúng tôi muốn xóa cho tất cả các permalinks danh mục con của họ: "mục" và "thể loại" (vì vậy có thể được điều chỉnh để chỉ xóa hai ID danh mục)

Tôi thấy rằng có một giải pháp với các bài đăng cá nhân ở đây , nhưng tôi không nghĩ rằng nó cũng hoạt động với các permalinks danh mục, phải không?

Câu trả lời:


6

Mã này thực hiện khá nhiều công việc cho câu hỏi này và một câu hỏi khác về việc loại bỏ / category / base khỏi permalinks. Nhận nó từ một plugin thực hiện điều này và quyết định chỉ sử dụng mã thô.

Vì vậy, permalinks chỉ có danh mục con thấp nhất được liệt kê.

Đầu tiên, chúng tôi đã có:

example.com/carget/items/books/

và bây giờ...

example.com/books

Tuy nhiên, các nguồn cấp RSS dường như không hoạt động với url ngắn hơn này và vẫn yêu cầu url dạng dài. (Không chắc có cách khắc phục nào không.) Ngoài ra, nó không thay đổi permalink bài. Nó chỉ là thể loại permalink thay đổi. Dán mã dưới đây vào tập tin tests.php của bạn. Tôi đang sử dụng Wordpress 3.0+.

// Remove category base
add_filter('category_link', 'no_category_parents',1000,2);
function no_category_parents($catlink, $category_id) {
    $category = &get_category( $category_id );
    if ( is_wp_error( $category ) )
        return $category;
    $category_nicename = $category->slug;

    $catlink = trailingslashit(get_option( 'home' )) . user_trailingslashit( $category_nicename, 'category' );
    return $catlink;
}

// Add our custom category rewrite rules
add_filter('category_rewrite_rules', 'no_category_parents_rewrite_rules');
function no_category_parents_rewrite_rules($category_rewrite) {
    //print_r($category_rewrite); // For Debugging

    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        $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_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';

    //print_r($category_rewrite); // For Debugging
    return $category_rewrite;
}

// Add 'category_redirect' query variable
add_filter('query_vars', 'no_category_parents_query_vars');
function no_category_parents_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_parents_request');
function no_category_parents_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;
}

Thực sự đánh giá cao câu trả lời này khi tôi đã đào khoảng hơn 2 giờ! Tôi đã chia sẻ điều này với những người ở wordpress.org vì tôi hy vọng điều này có thể giúp đỡ người khác! http://wordpress.org/support/topic/perinf-permalink-possible?replies=4#post-2214102

một cái gì đó tương tự làm việc cho các trang? wordpress.stackexchange.com/questions/173048/ từ
codecowboy 23/12/14
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.