Saya mencoba membuat Menu yang menampilkan maksimal 5 item. Jika ada lebih banyak item itu harus membungkusnya menjadi <ul>
Elemen lain untuk membuat dropdown.
5 Item atau kurang:
6 Item atau lebih
Saya tahu fungsi semacam ini dapat dengan mudah dibuat dengan alat bantu yang menghitung item menu dan membungkus jika ada lebih dari 5 remaing menjadi terpisah <ul>
. Tapi saya tidak tahu cara membuat alat bantu jalan ini.
Kode yang menunjukkan menu saya saat ini adalah sebagai berikut:
<?php wp_nav_menu( array( 'theme_location' => 'navigation', 'fallback_cb' => 'custom_menu', 'walker' =>new Custom_Walker_Nav_Menu ) ); ?>
Saya perhatikan bahwa jika menu tidak ditentukan oleh pengguna dan ia menggunakan fungsi mundur sebagai pengganti walker tidak memiliki efek. Saya membutuhkannya untuk bekerja dalam kedua kasus.
menus
navigation
walker
Semakin bertambah
sumber
sumber
Walker_Nav_Menu
dan ada contoh dalam codex . Apa maksud Anda dengan "Saya tidak tahu cara membuat Walker"?Jawaban:
Menggunakan kustom Walker,
start_el()
metode ini memiliki akses ke$depth
param: ketika0
elemnt adalah yang teratas, dan kita bisa menggunakan info ini untuk mempertahankan penghitung internal.Ketika penghitung mencapai batas, kita dapat menggunakan
DOMDocument
untuk mendapatkan dari hasil HTML penuh hanya elemen terakhir yang ditambahkan, bungkus dalam submenu dan tambahkan lagi ke HTML.Edit
Ketika jumlah elemen persis jumlah yang kita butuhkan +1, misalnya kita membutuhkan 5 elemen terlihat dan menu memiliki 6, tidak masuk akal untuk membagi menu, karena elemen akan menjadi 6 cara baik. Kode diedit untuk mengatasi itu.
Berikut kodenya:
Penggunaannya cukup sederhana:
sumber
$split_at = 5
tetapi$count
indeks mulai dari 0.$split_at
argumen, 5 secara default.Bahkan ada cara untuk membuat ini mungkin dengan CSS saja. Ini memiliki beberapa keterbatasan, tetapi saya masih berpikir itu mungkin pendekatan yang menarik:
Keterbatasan
Pendekatan
Meskipun saya tidak benar-benar menggunakan "Kuantitas Kueri" penggunaan kreatif
:nth-child
dan~
saya telah membaca Kueri Kuantitas untuk CSS baru -baru ini yang mendorong saya ke solusi ini.Pendekatannya pada dasarnya adalah ini:
...
titik menggunakanbefore
elemen pseudo.Berikut adalah kode CSS untuk markup menu WordPress default. Saya sudah berkomentar sebaris.
Saya juga membuat jsfiddle untuk menunjukkannya dalam tindakan: http://jsfiddle.net/jg6pLfd1/
Jika Anda memiliki pertanyaan lebih lanjut tentang cara kerjanya, silakan tinggalkan komentar, dengan senang hati saya akan menjelaskan kode lebih lanjut.
sumber
Anda bisa menggunakan
wp_nav_menu_items
filter. Ini menerima output menu dan argumen yang menyimpan atribut menu, seperti menu siput, wadah, dll.sumber
DOMDocument
bisa digunakan. Namun, dalam pertanyaan ini tidak ada sub menu, jadi jawabannya benar untuk kasus khusus ini. DOMDocument akan menjadi solusi "universal" tapi saya tidak punya waktu sekarang. Anda dapat menyelidiki;) mengulang-ulang item LI, jika seseorang memiliki anak UL lewati, itu akan menjadi solusi tetapi perlu versi tertulis :)ul
. WordPress sudah meng-loop item-item menu di menu walker. Ini sudah merupakan operasi yang lambat per se , menambah dan menambah lingkaran saya pikir bukan solusi yang tepat, sebaliknya, walker kustom akan menjadi solusi yang jauh lebih bersih dan efisien.Punya fungsi yang berfungsi, tetapi tidak yakin apakah itu solusi terbaik.
Saya menggunakan alat bantu khusus:
Fungsi yang menunjukkan menu aktual adalah sebagai berikut:
Saya mendeklarasikan variabel global $ menu_items dan menggunakannya untuk menunjukkan penutupan
<li>
dan<ul>
-tag. Mungkin saja bisa dilakukan di dalam custom walker, tapi saya tidak menemukan di mana dan bagaimana.Dua masalah: 1. Jika hanya ada 5 Item di Menu, itu membungkus item terakhir juga menjadi meskipun tidak perlu.
sumber
substr_count($output,'<li')
akan berada== 4
di tempat yang salah ...