Xóa sên loại bài tùy chỉnh khỏi URL


15

Không tìm thấy câu trả lời hữu ích cho việc này. Tôi nhận thức được các vấn đề xung đột và tất cả các vấn đề mà điều này có thể gây ra, tôi tò mò nếu nó KHÔNG CÓ KHẢ NĂNG. Điều này sẽ yêu cầu viết lại WP, tôi biết điều này nhiều.

Về cơ bản, giả sử chúng ta có CPT của "sự kiện". Tôi muốn có một trang của một sự kiện có URL http://domain.com/single-event-name và KHÔNG http://domain.com/events/single-event-name . Bất kỳ ý tưởng về làm thế nào để đi về nó?


Luôn muốn tìm hiểu về điều đó, không bao giờ nghĩ đến việc đặt câu hỏi. Cảm ơn!
fischi

@robbennet năm 2015 dường như vẫn chưa phải là một cách hợp pháp để làm điều này với phong cách.
Ben Racicot

Câu trả lời:


9

Đó là cách bạn có thể thực hiện phần đầu tiên của công việc - loại bỏ sên CPT trong liên kết bài đăng (ví dụ: loại bài đăng tin tức).

function df_custom_post_type_link( $post_link, $id = 0 ) {  

    $post = get_post($id);  

    if ( is_wp_error($post) || 'news' != $post->post_type || empty($post->post_name) )  
        return $post_link;  

    return home_url(user_trailingslashit( "$post->post_name" ));  
}
add_filter( 'post_type_link', 'df_custom_post_type_link' , 10, 2 );

Bây giờ sẽ có một quy tắc viết lại cho 'tin tức', bởi vì bạn sẽ gặp lỗi 404.

Thêm quy tắc viết lại như thế này:

function df_custom_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?news=$matches[1]', 'top');
}
add_action('init', 'df_custom_rewrite_rule');

Sau đó, chúng tôi sẽ cần xóa các quy tắc viết lại, vì vậy hãy đi tới Cài đặt - Permalinks và lưu các thay đổi.


1
Bạn không nên thêm các quy tắc viết lại trên init. Bạn chỉ nên thêm quy tắc của bạn vào các quy tắc hiện tại.
Chris_O

2
@Chris_O Bạn có thể giải thích? Làm thế nào một người sẽ thêm quy tắc cho các quy tắc hiện tại?
Desi

Sau khi thêm mã này, tất cả các trang của tôi có URLS là example.com/about-us đã ngừng hoạt động? Bất kỳ giải pháp cho điều này?
Rahul Gupta

4

Bạn có thể thử plugin này ( http://wordpress.org/extend/plugins/remove-slug-from-custom-post-type/ ) để xóa sên, nhưng nó sẽ chỉ hoạt động nếu cấu trúc permalink là "/% postname % /


Chính xác plugin này là tuyệt vời! Tôi là người dùng có kinh nghiệm về plugin này và tôi hoàn toàn khuyên bạn nên dùng nó! đây là liên kết của trang web của plugin giải thích sâu về Ultimatewebtips.com/remove-slug-from-custom-post-type
Kuldeep Daftary

Đây là một Plugin đẹp và có chính xác tính năng mà tôi đang tìm kiếm. Giải pháp @bartosz là một CPT cụ thể, mặc dù bạn cũng có được ý tưởng chung từ nó. Sau khi đào sâu vào Plugin này, mọi thứ đã rõ ràng, cảm ơn bạn!
fischi

0

Bạn luôn có thể nối vào "parse numquest" để thực hiện kiểm tra xem liệu loại tùy chỉnh có tên được yêu cầu có tồn tại hay không và sau đó sửa đổi các truy vấn thích hợp. Bạn sẽ cần một cái gì đó dọc theo dòng phản hồi của @ Bartosz để tạo ra permalink ngoài ra:

 add_filter('parse_request', "t21_parse_request" , 1, 1);

 function t21_parse_request($wbobj)
 {
      $vars = $wpobj->query_vars;
      $slug = $query_vars['pagename'];

      $posts = get_posts(array(
           "post_type" => "event",
           "post_name" => $slug
      ));

      if($posts)
      {
           //we know your "event" entry exists so we now amend the query_vars
           //first unset the 'page' and 'pagename'
           unset($query_vars['page']);
           unset($query_vars['pagename'];

           //now rebuild the query_vars
           $query_vars['post_type'] = "event"; //CPT name
           $query_vars['name'] = $slug;
           $query_vars['event'] = $slug //again - this constructs the "event=myevent" query string
      }
      else
      {
           //just return $wpobj since we know that there is no "event"
           return $wpobj;
      }
 }

Tuy nhiên, điều này không cho rằng bạn sẽ không có bất kỳ tên bài đăng nào có cùng tên với tên bài đăng, nếu không, bài đăng sẽ không bao giờ xuất hiện vì nó phù hợp với loại sự kiện trước tiên.


0
function register_cpt_type() {
    register_post_type('cpt', array(
        'rewrite' => array("slug" => "/cpt", "with_front" => false),
    ));
}
add_action('init', 'register_cpt_type')

function cpt_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?cpt=$matches[1]', 'top');
}
add_action('after_theme_setup', 'cpt_rewrite_rule');

tuôn ra / tái chế url viết lại, sau đó chỉnh sửa .htaccess

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
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.