Hapus siput jenis kiriman khusus dari URL


15

Belum menemukan jawaban yang berguna untuk ini. Saya menyadari masalah konflik dan semua masalah ini dapat menyebabkan, saya ingin tahu apakah itu MUNGKIN tidak DISARANKAN. Ini akan membutuhkan WP penulisan ulang, saya tahu ini banyak.

Pada dasarnya, katakanlah kita memiliki CPT "peristiwa". Saya ingin memiliki satu halaman acara memiliki URL http://domain.com/single-event-name dan BUKAN http://domain.com/events/single-event-name . Ada ide tentang bagaimana cara melakukannya?


Selalu ingin mencari tahu tentang itu, tidak pernah berpikir untuk mengajukan pertanyaan. Terima kasih!
fischi

@robbennet pada 2015 tampaknya masih belum ada cara yang sah untuk melakukan ini dengan gaya.
Ben Racicot

Jawaban:


9

Itulah cara Anda dapat melakukan bagian pertama dari pekerjaan - singkirkan o CPT slug di tautan posting (mis., Jenis posting berita).

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 );

Sekarang harus ada aturan menulis ulang untuk 'berita', karena Anda akan mendapatkan kesalahan 404.

Tambahkan aturan penulisan ulang seperti ini:

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

Maka kita perlu menghapus aturan penulisan ulang, jadi buka Pengaturan - Permalinks dan simpan perubahan.


1
Anda seharusnya tidak menambahkan aturan penulisan ulang di init. Anda hanya perlu menambahkan aturan Anda ke aturan saat ini.
Chris_O

2
@ Chris_O Bisakah Anda menguraikan? Bagaimana cara menambahkan aturan ke aturan saat ini?
Desi

Setelah menambahkan kode ini, semua halaman saya yang memiliki URL sebagai example.com/about-kami berhenti bekerja? Ada solusi untuk ini?
Rahul Gupta

4

Anda dapat mencoba plugin ini ( http://wordpress.org/extend/plugins/remove-slug-from-custom-post-type/ ) untuk menghapus slug, tetapi itu hanya akan berfungsi jika struktur permalink adalah "/% postname % /


Tepatnya plugin ini mengagumkan! Saya pengguna berpengalaman plugin ini dan saya sangat merekomendasikannya! inilah tautan dari situs plugin yang menjelaskannya secara mendalam ultimatewebtips.com/remove-slug-from-custom-post-type
Kuldeep Daftary

Ini adalah Plugin yang bagus, dan memiliki fitur persis yang saya cari. Solusi @ Bartosz adalah untuk satu CPT khusus, meskipun Anda juga mendapatkan ide umum darinya. Setelah menggali ke dalam Plugin ini sekarang sudah jelas, terima kasih!
fischi

0

Anda selalu dapat menghubungkan ke "parse_request" untuk melakukan pemeriksaan untuk melihat apakah jenis kustom dengan nama yang diminta ada dan kemudian memodifikasi query_vars dengan tepat. Anda akan memerlukan sesuatu di sepanjang baris respons @ Bartosz untuk menghasilkan permalink sebagai tambahan:

 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;
      }
 }

Namun ini mengasumsikan bahwa Anda tidak akan memiliki nama kiriman dengan nama yang sama dengan nama kiriman, jika tidak kiriman tersebut tidak akan pernah muncul karena cocok dengan jenis acara terlebih dahulu.


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');

siram / daur ulang penulisan ulang url, lalu edit .htaccess

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.