URL'den özel yayın türü bilgi dosyasını kaldırın


15

Bunun için yararlı bir cevap bulamadık. Çatışma sorunlarının ve bunun neden olabileceği tüm sorunların farkındayım, MÜMKÜN OLMADIĞI merak ediyorum. Bu WP yeniden yazmalarını gerektirecek, bunu çok biliyorum.

Temel olarak, diyelim ki bir "olaylar" CPT'miz var. Tek bir olayın sayfası URL'si olmasını istediğiniz http://domain.com/single-event-name ve NOT http://domain.com/events/single-event-name . Bu konuda nasıl bir fikriniz var mı?


Her zaman bunu öğrenmek istedim, asla soruyu sormayı düşünmedim. Teşekkürler!
fischi

@robbennet 2015 yılında hala bunu stil ile yapmanın yasal bir yolu yok gibi görünüyor.
Ben Racicot

Yanıtlar:


9

İşin ilk bölümünü bu şekilde yapabilirsiniz - posta bağlantısında CPT slug'dan kurtulun (örneğin, haber posta türü).

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

Şimdi 'haberler' için bir yeniden yazma kuralları olmalı, çünkü 404 hatası alacaksınız.

Yeniden yazma kuralını şu şekilde ekleyin:

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

Ardından yeniden yazma kurallarını temizlememiz gerekeceğinden Ayarlar - Kalıcı Bağlantılar bölümüne gidin ve değişiklikleri kaydedin.


1
İnit'e yeniden yazma kuralları eklememelisiniz. Kuralınızı mevcut kurallara eklemeniz yeterlidir.
Chris_O

2
@Chris_O Ayrıntılı olabilir misiniz? Kural mevcut kurallara nasıl eklenir?
Desi

Bu kodu ekledikten sonra, example.com/about-us gibi URL'leri olan tüm sayfalarımın çalışması durdu mu? Bunun için bir çözüm var mı?
Rahul Gupta

4

Bu eklentiyi ( http://wordpress.org/extend/plugins/remove-slug-from-custom-post-type/ ) sülük kaldırmak için deneyebilirsiniz , ancak yalnızca kalıcı bağlantı yapısı "/% postname ise çalışır /%


Tam olarak bu eklenti harika! Bu eklentinin deneyimli bir kullanıcısıyım ve kesinlikle tavsiye ederim! eklentinin sitesi derinlemesine açıklayan link ultimatewebtips.com/remove-slug-from-custom-post-type
Kuldeep Daftary

Bu güzel bir eklenti ve tam olarak aradığım özelliğe sahip. @bartosz çözümü de bir CPT'ye özeldir, ancak siz de genel fikri sizden alabilirsiniz. Bu Eklentiyi araştırdıktan sonra her şey açık, teşekkürler!
fischi

0

İstenen adda özel bir tür olup olmadığını kontrol etmek için her zaman "parse_request" bağlayabilir ve sonra query_vars'ı uygun şekilde değiştirebilirsiniz. Kalıcı bağlantıyı oluşturmak için @ Bartosz'un yanıt satırlarında bir şeye ihtiyacınız olacak:

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

Ancak bu, bir posta adıyla aynı ada sahip hiçbir posta adına sahip olmayacağınızı varsayar, aksi takdirde yayın hiçbir zaman önce bir olay türüyle eşleştiği için görünmez.


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

url yeniden yazma işlemlerini yıkayın / geri dönüştürün, ardından .htaccess dosyasını düzenleyin

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.