( Catatan Moderator: Awalnya berjudul "wp_nav_menu kelas Leluhur tanpa anak dalam struktur navigasi")
Saya memiliki wp_nav_menu
di header saya yang memiliki tiga halaman di dalamnya. Ketika saya berada di salah satu halaman itu, halaman li
yang berisi di menu mendapatkan kelas .current_page_item
. Tiga halaman ini memiliki template, dan template ini berisi permintaan khusus untuk mendapatkan semua posting dari jenis konten tertentu. Akibatnya, "anak-anak" yang dirasakan dari halaman tingkat atas ini sebenarnya bukan anak-anak, mereka hanya tipe konten yang saya kaitkan dengan halaman tingkat atas itu menggunakan templat.
Saya ingin item menu tingkat atas untuk mendapatkan 'current-ancestor'
kelas ketika pengguna menelusuri satu halaman dari jenis posting tertentu, sekali lagi, yang terkait dengan halaman itu hanya dalam kueri khusus dalam file template.
Harapan itu masuk akal - jika tidak, beri tahu saya di mana saya kehilangan Anda! Sangat menghargai bantuan apa pun.
--Edited untuk spesifik: Misalnya, saya memiliki halaman statis yang disebut Lokakarya yang menggunakan templat. Siputnya adalah bengkel . Templat memiliki fungsi get_posts khusus dan loop di dalamnya, yang menarik dan menampilkan semua posting dari jenis konten khusus yang disebut workshop . Jika saya mengklik salah satu judul bengkel ini, saya akan dibawa ke konten lengkap dari konten itu. Struktur permalink dari jenis posting khusus diatur ke bengkel / postname, jadi seperti yang dilihat pengguna, konten ini adalah anak-anak dari halaman Lokakarya, padahal sebenarnya mereka semua adalah satu jenis konten tetapi tidak terkait dengan halaman tersebut. Itulah celah yang harus saya tutup secara efektif di menu, menyoroti item menu 'Lokakarya' saat menelusuri konten bertipe 'lokakarya'.
Sekali lagi, harapan itu masuk akal, saya pikir saya mengatakan 'lokakarya' ke atas sebanyak 20 kali dalam satu paragraf!
sumber
/workshops/
dan ketika pengguna berada di halaman bengkel (yaitu/workshops/example-workshop/
) Anda ingin item menu "Lokakarya" memiliki kelas yangcurrent_page_item
ditugaskan, benar?Jawaban:
Ada solusi yang lebih sederhana. Lupakan membuat halaman untuk setiap jenis posting agar Anda dapat memiliki item nav, karena seperti yang telah Anda pelajari, WP tidak memiliki cara untuk mengenali bahwa jenis kustom yang Anda jelajahi terkait dengan halaman itu.
Sebagai gantinya, buat tautan khusus di Appearance-> Menus. Cukup masukkan URL yang akan mengembalikan jenis kustom Anda dan beri label, lalu tekan "Tambahkan ke Menu".
atau non-cantik-permalink:
ini saja akan membuat tombol nav yang menampilkan semua posting dengan jenis posting khusus itu, dan juga akan menambahkan kelas item menu saat ini ketika Anda mengklik item nav itu - tetapi itu belum menambahkan kelas nav pada sembarang URL selain yang ini
Kemudian, setelah dibuat, masuk ke konfigurasi untuk item baru itu, dan masukkan siput dari jenis posting kustom di bidang "Judul Atribut" (Anda juga bisa menggunakan bidang deskripsi, tetapi yang tersembunyi di opsi layar admin secara default).
Sekarang, Anda perlu menghubungkan
nav_menu_css_class
filter (yang dipecat untuk setiap item nav) dan memeriksa apakah konten yang dilihat adalah jenis posting yang ditunjukkan dalam item nav kustom Anda:Dalam hal ini, kita akan memeriksa bahwa isian judul Atribut Judul tidak kosong dan jika cocok dengan post_type saat ini yang ditanyai. Jika demikian, kami menambahkan kelas item menu saat ini ke array kelasnya, lalu mengembalikan array yang dimodifikasi.
Anda dapat memodifikasi ini untuk hanya mencocokkan judul item nav, tetapi jika karena alasan tertentu Anda ingin memberi judul item nav berbeda dari siput polos jenis posting, menggunakan bidang Judul Atribut atau Deskripsi memberi Anda fleksibilitas.
Sekarang setiap kali Anda melihat satu item (atau bahkan daftar arsip) dari jenis posting yang cocok dengan item menu nav, item tersebut akan diberi item-menu-item kelas CSS sehingga penyorotan Anda akan berfungsi.
Tidak perlu halaman atau templat halaman ;-) Permintaan URL menangani pengambilan posting yang tepat. Template lingkaran Anda berhati-hati menampilkan output permintaan. Fungsi ini menangani mengenali apa yang sedang ditampilkan dan menambahkan kelas CSS.
BONUS
Anda bahkan dapat mengotomatiskan proses menggunakan
wp_update_nav_menu_item
, dengan memiliki item menu yang dihasilkan secara otomatis untuk semua jenis posting Anda. Untuk contoh ini, Anda harus terlebih dahulu mengambil$menu_id
menu nav yang Anda inginkan.sumber
current_page_parent
item navigasi dari blog saya - tetapi jika tidak berhasil. thx$item->attr_title
mengeluarkan JUDUL, dan saya menulis judul dalam huruf kapital. jadi saya mengubah atribut$item->post_name
dan sekarang berfungsi dengan baik untuk saya.portfolio
. Saya telah menggunakan kode di atas. Apa yang bisa menjadi masalah?alih-alih menggunakan
Anda mungkin ingin mencoba:
Karena kadang-kadang jenis posting tidak diatur dalam var permintaan. Ini adalah kasus untuk post_type default "post", jadi jika Anda ingin menyorot posting yang terdaftar dari halaman daftar, Anda harus menggunakan ini. get_very_var () baru saja mengembalikan string kosong untuk jenis posting yang tidak kustom.
sumber
@Somatis - itu fantasic! Saya sedikit memodifikasi kode Anda sehingga juga berfungsi untuk Taksonomi tertentu (yang saya gunakan hanya untuk post_type terkait). Idenya adalah untuk menggunakan atribut Judul item menu untuk menyimpan baik nama post_type DAN nama taksonomi, dipisahkan oleh tanda titik koma, dan kemudian meledak oleh fungsi.
sumber
Di sini solusi saya jika Anda ingin bekerja dengan wp_list_pages.
tambahkan ini di functions.php Anda
Sekarang hanya menambahkan dalam tabel wp_options baris baru dengan OPTION_NAME dari page_for_custom_post_type-xxxx dan option_value' dengan halaman-ID u ingin menghubungkan.
Mungkin Anda mengenali bahwa sudah ada opsi bernama page_for_posts . Jika Anda hanya memiliki 1 jenis posting khusus, Anda dapat mengatur halaman Anda di /wp-admin/options-reading.php di dropdown dan navigasi akan mengatur current_page dengan benar.
Saya pikir inti wordpress harus memperpanjang bagian ini dengan dropdown untuk setiap jenis posting yang terdaftar.
sumber
Saya memutuskan untuk tetap menggunakan halaman dan menggunakan nama templat halaman sebagai kelas pada item nav. Ini memungkinkan saya untuk menghindari mengacaukan atribut judul yang saya tidak suka tentang beberapa solusi lain.
Saya juga memiliki kelas tubuh yang ditambahkan ke header.php
Akhirnya solusi ini membutuhkan beberapa css tambahan untuk menerapkan status yang dipilih / aktif ke item menu nav Anda. Saya menggunakannya untuk menampilkan arsip taksonomi dan jenis posting khusus yang terkait dengan halaman ini sebagai anak-anak dari halaman ini:
sumber
Warning: join() [function.join]: Invalid arguments passed in /home/path/to/wp-includes/nav-menu-template.php on line 76
Adakah yang tahu apa yang terjadi di sini?return $classes
luar dan setelah ituif
tampaknya menyelesaikan kesalahan di atas.@Somatis - Kode hebat! Saya memang membuat satu perubahan sendiri. Saya ingin mempertahankan Judul Atribut untuk tujuan yang dimaksudkan, jadi alih-alih saya menempatkan siput Jenis Posting Khusus di properti menu lanjutan Hubungan Tautan (XFN) yang dapat Anda aktifkan di Opsi Layar. Saya dimodifikasi
dan mengubahnya menjadi
sumber
Kerja bagus Somatic.
Sayangnya, saya tidak mengerti bagaimana Anda bisa mendaftarkan jenis posting khusus Anda di halaman seperti yang Anda jelaskan. Jika saya tidak menggunakan halaman-portfolio.php dan menambahkannya ke halaman, yang saya dapatkan adalah halaman 404.
Jika saya menyukai Gavin, saya telah sedikit memodifikasi fungsi Anda untuk menghapus "current_page_parent" dari halaman blog seperti ini.
}
sumber