Özel yazı türü ve sınıflandırmaları için kalıcı bağlantı yapısını nasıl değiştirebilirim?


11

Bu, daha önce sahip olduğum bir sorunun repostu, ancak bunu tamamen çözebilmek için şimdi daha fazla ayrıntıya girmeyi seviyorum.

Bu yüzden, tekrar (normal) gönderilerle kalıcı bağlantıyı değiştirmek Ayarlar> Kalıcı bağlantı'ya gitmek ve onu yaygın olarak kullandığınız gibi istediğiniz bir şeyle değiştirmek kadar kolaydır %category%/%postname%.html. Tüm bunlar işe yarıyor. Sadece bu özel yazı türü ve taksonomileri için kolay olsaydı.

Ben de bunu başarmayı seviyorum.

  1. http://mywordpress.com/portfolio.html - Tüm kategorilerdeki tüm yayınları görüntüle.
  2. http://mywordpress.com/portfolio/music/ - Bu kategorideki tüm gönderileri göster.
  3. http://mywordpress.com/portfolio/music/trance/ - Bu (alt) kategorideki tüm yayınları görüntüleyin.
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Yayını görüntüleyin.

Şimdiye kadar aldığım şey şudur:

  1. Önce custom_post_typeadlandırılmış bir proje ve bir taxonomy project_category oluşturdum .
  2. Bir sayfa Portföyü oluşturdum ve tüm post_type = projectyayınları listeleyecek bir Sayfa Şablonu verdim . Sayfaların kalıcı bağlantısına nasıl .html ekleyebilirim? Ben http://mywordpress.com/portfolio.html istiyorum şimdi http://mywordpress.com/portfolio bağlanır . Bu ilk sorunu çözmelidir.
  3. O zaman işler zorlaşacaktır, çünkü orada kaç alt kategoriyi önceden bilmiyoruz, belki de hiç yoktur. Yani peşinde olduğumuz yapı portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Hala bu noktada takılı kaldım. Ben her nasılsa yoluna eklenen son kategori almak ve düzgün işlemek nerede bir taxonomy.php dosyaya yol gerekir project_category boyunca geçmek gerektiğini düşünüyorum.
  4. Ben de bununla mücadele etmedim ama bir şeyin %postname%.htmlsonunda bununla bir ilgisi olmalı.

Umarım sorunum açıktır ve beni dört TAM gündür meşgul eden bu sorunu çözmeme yardımcı olacak cesur geliştiriciler var!


1
Son soruda verdiğim çözüm, doğru bir şekilde uyguladıysanız, bu şekilde çalışmış olmalıydı. Tek şey html bölümünü
alamamanız

Evet, ancak belirli bir yola kilitlendi, bu nedenle yalnızca kategori / alt kategori / sayfa varken alt kategoriler veya daha fazlası olmayabilir. Bu daha dinamik.
Mark

Ya da düzgün bir şekilde uygulamadım;)
Mark

Yanıtlar:


4

Tamam, bir çözümüm olabileceğini düşünüyorum. Bunu başarmanın doğru yolu olup olmadığı hakkında hiçbir fikrim yok, ama şimdilik olduğu gibi işe yarayan tek şey bu.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}

İstek filtresi, bir kategori (aslında terim) ve bir gönderi istersek filtrelemenin iyi bir yoludur. Gönderi bir kategoride, bir alt kategoride olsun ya da olmasın, yalnızca bir yeniden yazma kuralı eklemenize ve gönderi sayfası almanıza izin verir.
ZalemCitizen

1

2 Farklı Yöntem:

* Bu yazının altındaki notlara bakın.


örneğin, böyle bir kalıcı bağlantı yapısına sahip olmak istersiniz:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / yazım

İlk olarak , kalıcı bağlantıları /% category% /% postname% olarak ayarlamanız gerekebilir . Sonra...




YÖNTEM 1:

(STANDART kategoriler oluşturmak MAIN_CATEGORY, SUB_CAT_1, and etc..bu parametre de dahil olmak üzere), ve özel yayın kayıt:

'taxonomies'    => array('category'..)

ve kalıcı kodları değiştirmek için bu kodları kullanın: https://wordpress.stackexchange.com/a/195643/33667
Ardından, bir ÖZEL POST yayınladıktan sonra (bir kategori altına eklenmişse) URL:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



YÖNTEM 2:

(ps , yüzlerce veya binlerce yayın yayınlamayı planlıyorsanız bu yöntem önerilmez )

MAIN_CATEGORYşu parametreler dahil olmak üzere ÖZEL POST'u (adlandırılmış ) kaydedin:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

: o zaman, bu gibi özel mesajları yayımlamak yani birkaç özel yayımlamak ( Mesajları adında, başka yazı yayınladığınızda, sonra o zaman, ama seçin. ebeveyn olarak.
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Eğer acemi iseniz, gözden geçirin : ÖZEL POST'u kaydedin ve ÖZEL POST'u TAXONOMY ile kaydedin
2) alt seviyeler için arama işlevselliğine ihtiyacınız varsa, özel arama sorgusu kullanın


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.