Saya memiliki menu yang didefinisikan dalam WP Admin yang terlihat seperti ini:
Saya ingin dapat menampilkan semua tautan anak di bilah samping setiap kali saya berada di halaman induk. Misalnya, jika pengguna ada di halaman "Tentang Kami", saya ingin daftar 4 tautan yang disorot berwarna hijau muncul di sidebar.
Saya melihat dokumentasi untuk wp_nav_menu () dan sepertinya tidak memiliki cara bawaan untuk menentukan node tertentu dari menu yang diberikan untuk digunakan sebagai titik awal ketika membuat tautan.
Saya membuat solusi untuk situasi serupa yang mengandalkan hubungan yang dibuat oleh induk laman, tetapi saya mencari solusi yang menggunakan sistem menu secara khusus. Bantuan apa pun akan dihargai.
Jawaban:
Ini masih dalam pikiran saya jadi saya meninjau kembali dan mengumpulkan solusi ini, yang tidak terlalu bergantung pada konteks:
Pemakaian
sumber
Walker_Nav_Menu
kelas. Suka semua menu terlalu banyak untuk dikomentari - ajukan pertanyaan baru tentang itu?wp_filter_object_list
baris kewp_filter_object_list( $items, array( 'object_id' => $args->submenu ), 'and', 'ID' );
@goldenapples: Kelas Walker Anda tidak berfungsi. Tapi idenya benar-benar bagus. Saya membuat alat bantu jalan berdasarkan ide Anda:
Sekarang Anda dapat menggunakan:
Outputnya adalah daftar yang mengandung elemen root saat ini dan itu anak-anak (bukan anak-anak mereka). Def: Root element: = Item menu tingkat atas yang sesuai dengan halaman saat ini atau merupakan induk dari halaman saat ini atau induk dari induk ...
Ini tidak persis menjawab pertanyaan asli tetapi hampir, karena masih ada item tingkat atas. Ini baik untuk saya, karena saya ingin elemen tingkat atas sebagai judul sidebar. Jika Anda ingin menghilangkan ini, Anda mungkin harus mengganti display_element atau menggunakan HTML-Parser.
sumber
Hai @jessegavin :
Nav Menu disimpan dalam kombinasi jenis kiriman khusus dan taksonomi khusus. Setiap menu disimpan sebagai Istilah (yaitu "Tentang Menu" , ditemukan di
wp_terms
) dari Taksonomi Kustom (yaitunav_menu
, ditemukan diwp_term_taxonomy
.)Setiap Item Menu Nav disimpan sebagai pos
post_type=='nav_menu_item'
(yaitu "Tentang Firma" , ditemukan diwp_posts
) dengan atributnya yang disimpan sebagai pos meta (inwp_postmeta
) menggunakanmeta_key
awalan di_menu_item_*
mana_menu_item_menu_item_parent
ID induk item item item menu Nav Menu Anda.Hubungan antara menu dan item menu disimpan di
wp_term_relationships
tempat yangobject_id
berkaitan dengan$post->ID
untuk Item Menu Nav dan yang$term_relationships->term_taxonomy_id
terkait dengan menu yang ditentukan secara kolektif dalamwp_term_taxonomy
danwp_terms
.Saya cukup yakin akan memungkinkan untuk menghubungkan keduanya
'wp_update_nav_menu'
dan'wp_update_nav_menu_item'
untuk membuat menu yang sebenarnya di dalamwp_terms
dan serangkaian hubungan paralelwp_term_taxonomy
dan diwp_term_relationships
mana setiap Item Menu Nav yang memiliki item Menu sub-Nav juga menjadi Menu Nav itu sendiri.Anda juga ingin mengait
'wp_get_nav_menus'
(yang saya sarankan ditambahkan ke WP 3.0 berdasarkan beberapa pekerjaan serupa yang saya lakukan beberapa bulan yang lalu) untuk memastikan bahwa Nav Menu yang Anda buat tidak ditampilkan untuk manipulasi oleh pengguna di admin, jika tidak mereka akan akan keluar dari sinkronisasi dengan sangat cepat dan kemudian Anda akan memiliki mimpi buruk data di tangan Anda.Kedengarannya seperti proyek yang menyenangkan dan bermanfaat, tetapi ini sedikit lebih banyak kode dan pengujian daripada yang bisa saya tangani saat ini sebagian karena segala sesuatu yang menyinkronkan data cenderung menjadi PITA ketika harus menyelesaikan semua bug (dan karena klien yang membayar mendesak saya untuk menyelesaikan sesuatu. :) Tapi dengan informasi di atas, saya cukup termotivasi pengembang plugin WordPress dapat mengkodekannya jika mereka mau.
Tentu saja Anda menyadari sekarang jika Anda melakukan kode itu Anda berkewajiban untuk mempostingnya kembali di sini sehingga kita semua dapat memperoleh manfaat dari sumbangan Anda! :-)
sumber
wp_nav_menu()
maka Anda harus mengkloning menu karena tergabungwp_nav_menu()
erat dengan struktur menu . Pilihan lainnya adalah menyalinwp_nav_menu()
kode dan membuat modifikasi yang diperlukan untuk ditampilkan sebagai submenu.Ini adalah ekstensi alat bantu yang harus melakukan apa yang Anda cari:
Berdasarkan longgar pada kode mfields, saya merujuk pada komentar saya sebelumnya. Yang perlu dilakukan hanyalah memeriksa saat menjalankan menu untuk melihat apakah elemen saat ini adalah (1) item menu saat ini, atau (2) leluhur dari item menu saat ini, dan perluas subtree di bawahnya hanya jika salah satu dari kondisi tersebut benar . Semoga ini berhasil untuk Anda.
Untuk menggunakannya, cukup tambahkan argumen "walker" ketika Anda memanggil menu, yaitu:
sumber
$top_level_elements
dan tambahkan tes Anda sendiri sebelum panggilan$this->display_element
.depth
parameter ke panggilanwp_nav_menu
, jika tema Anda entah bagaimana mengungguli default 0 (tampilkan semua level)?Pembaruan: Saya menjadikan ini sebagai plugin. Unduh di sini .
Saya perlu menyelesaikan ini sendiri dan akhirnya menulis filter pada hasil pencarian menu. Ini memungkinkan Anda menggunakan
wp_nav_menu
seperti biasa, tetapi memilih sub-bagian menu berdasarkan judul elemen induk. Tambahkansubmenu
parameter ke menu seperti ini:Anda bahkan dapat masuk ke beberapa level dengan memasukkan garis miring:
Atau jika Anda lebih suka dengan array:
Ini menggunakan versi slug dari judul, yang harus membuatnya memaafkan hal-hal seperti huruf besar dan tanda baca.
sumber
$loc = split( "/", $loc );
dalam plugin dengan$loc = preg_split( "~/~", $loc );
Saya mengumpulkan kelas berikut untuk diri saya sendiri. Ini akan menemukan orang tua nav atas halaman saat ini, atau Anda dapat memberikannya ID nav atas target di konstruktor walker.
Panggilan Nav:
sumber
@davidn @hakre Hai, saya punya solusi jelek tanpa HTML-Parser atau override display_element.
sumber
Output menu nav mencakup banyak kelas untuk item saat ini, leluhur item saat ini, dll. Dalam beberapa situasi, saya telah dapat melakukan apa yang ingin Anda lakukan dengan membiarkan seluruh output nav tree, dan kemudian menggunakan css untuk menguraikannya ke hanya anak-anak dari halaman saat ini, dll.
sumber
Saya membuat alat bantu jalan yang dimodifikasi yang akan membantu! Tidak sempurna - ia meninggalkan beberapa elemen kosong, tetapi ia berhasil. Modifikasi pada dasarnya adalah bit $ current_branch tersebut. Semoga ini bisa membantu seseorang!
}
sumber
Lihat kode di plugin saya atau gunakan untuk tujuan Anda;)
Plugin ini menambahkan widget "Navigasi Menu" yang disempurnakan. Ini menawarkan banyak opsi yang dapat diatur untuk menyesuaikan output dari menu kustom melalui widget.
Fitur termasuk:
item yang dipilih (opsi untuk memasukkan item induk).
http://wordpress.org/extend/plugins/advanced-menu-widget/
sumber