Bagaimana cara mengubah struktur permalink untuk jenis posting khusus dan taksonominya?

10

Ini adalah repost dari pertanyaan sebelumnya yang saya miliki, tetapi saya ingin masuk ke detail lebih lanjut sekarang untuk dapat menyelesaikan ini sepenuhnya.

Jadi sekali lagi, dengan posting (normal) mengubah permalink semudah pergi ke Pengaturan> Permalink dan dengan mengubahnya ke apa pun yang Anda suka seperti yang digunakan secara luas %category%/%postname%.html. Ini semua berfungsi. Kalau saja ini mudah untuk jenis pos kustom dan taksonomi juga.

Jadi ini yang ingin saya capai.

  1. http://mywordpress.com/portfolio.html - Tampilkan semua posting di semua kategori.
  2. http://mywordpress.com/portfolio/music/ - Tampilkan semua posting dalam kategori ini.
  3. http://mywordpress.com/portfolio/music/trance/ - Tampilkan semua posting dalam kategori (anak) ini.
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Tampilkan pos.

Apa yang saya dapatkan sejauh ini adalah sebagai berikut:

  1. Pertama saya membuat proyekcustom_post_type bernama dan project_category .taxonomy
  2. Saya membuat halaman Portofolio dan memberikannya Halaman Template yang akan mencantumkan semua post_type = projectposting. Bagaimana saya bisa menambahkan .html ke permalink halaman? Sekarang tautan ke http://mywordpress.com/portfolio sementara saya ingin http://mywordpress.com/portfolio.html . Ini harus menyelesaikan masalah pertama.
  3. Maka semuanya akan menjadi sulit, karena kita tidak tahu dengan forehand berapa banyak subkategori di sana, mungkin bahkan tidak ada. Jadi struktur yang kita kejar adalah portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Saya masih terjebak pada saat ini. Saya pikir saya entah bagaimana harus mendapatkan kategori terakhir yang ditambahkan ke path dan meneruskannya di sepanjang project_category , yang seharusnya mengarah ke file taxonomy.php di mana saya dapat memprosesnya dengan benar.
  4. Saya belum menangani ini juga tetapi harus ada hubungannya dengan %postname%.htmlpada akhir sesuatu.

Saya harap masalah saya jelas dan ada pengembang berani yang akan membantu saya mengatasi masalah ini yang telah membuat saya sibuk selama empat hari LENGKAP!

Menandai
sumber
1
Solusi yang saya berikan dalam pertanyaan terakhir seharusnya bekerja seperti itu, jika Anda menerapkannya dengan benar. Satu-satunya hal adalah Anda tidak bisa mendapatkan bagian html
Manny Fleurmond
Ya tapi itu dikunci ke jalur tertentu, jadi hanya kategori / subkategori / halaman sementara mungkin tidak ada subkategori atau bahkan lebih. Ini lebih dinamis.
Mark
Atau saya tidak menerapkannya dengan benar;)
Mark

Jawaban:

4

Ok saya pikir saya mungkin punya solusi. Saya tidak tahu apakah ini cara yang tepat untuk mencapai ini, tetapi untuk sekarang ini satu-satunya hal yang tampaknya berhasil.

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;
}
Menandai
sumber
Filter permintaan adalah cara yang baik untuk memfilter jika kami menanyakan kategori (istilah sebenarnya) dan sebuah pos. Itu memungkinkan menambahkan hanya satu aturan penulisan ulang dan mendapatkan halaman posting apakah jika posting dalam kategori, subkategori atau tidak sama sekali.
ZalemCitizen
1

2 Metode Yang Berbeda:

* Lihat catatan di bagian bawah posting ini.


misalnya, Anda ingin memiliki struktur permalink seperti:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

Pada awalnya , Anda mungkin perlu mengatur permalink ke /% kategori% /% postname% . Kemudian...




METODE 1:

membuat kategori STANDAR ( MAIN_CATEGORY, SUB_CAT_1, and etc..), dan mendaftarkan CUSTOM POST, termasuk parameter ini:

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

dan gunakan kode ini untuk mengubah permalinks: https://wordpress.stackexchange.com/a/195643/33667
Kemudian, setelah menerbitkan CUSTOM POST (jika dilampirkan dalam kategori), URL akan menjadi:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



METODE 2:

(ps metode ini tidak disarankan jika Anda berencana untuk menerbitkan ratusan atau ribuan posting)

daftarkan CUSTOM POST (bernama MAIN_CATEGORY), termasuk parameter ini:

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

kemudian, terbitkan posting kustom seperti ini: (yaitu menerbitkan beberapa posting kustom , bernama . Setelah itu, ketika Anda mempublikasikan posting lain, tetapi pilih sebagai orang tua.
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Jika Anda pemula, tinjau: Daftar CUSTOM POST dan Mendaftarkan CUSTOM POST dengan TAXONOMY
2) jika Anda akan memerlukan fungsionalitas pencarian untuk sub-level, kemudian gunakan permintaan pencarian khusus

T.Todua
sumber