Melalui fungsi API, saya ingin menentukan menu Navigasi baru , memilihnya dalam tema saat ini, dan kemudian menyisipkan beberapa Halaman sebagai item menu. Ini harus dilakukan misalnya pada aktivasi tema.
Melalui proses (yang cukup menyakitkan) dari rekayasa balik database menyisipkan dan memperbarui setelah secara manual mengatur menu Navigasi dan item, saya telah menyatukan langkah-langkah berikut, di mana 'footer-nav' adalah slug ID dari menu Navigasi I ' m membuat:
if (!term_exists('footer-nav', 'nav_menu')) {
$menu = wp_insert_term('Footer nav', 'nav_menu', array('slug' => 'footer-nav'));
// Select this menu in the current theme
update_option('theme_mods_'.get_current_theme(), array("nav_menu_locations" => array("primary" => $menu['term_id'])));
// Insert new page
$page = wp_insert_post(array('post_title' => 'Blog',
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'page'));
// Insert new nav_menu_item
$nav_item = wp_insert_post(array('post_title' => 'News',
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'nav_menu_item'));
add_post_meta($nav_item, '_menu_item_type', 'post_type');
add_post_meta($nav_item, '_menu_item_menu_item_parent', '0');
add_post_meta($nav_item, '_menu_item_object_id', $page);
add_post_meta($nav_item, '_menu_item_object', 'page');
add_post_meta($nav_item, '_menu_item_target', '');
add_post_meta($nav_item, '_menu_item_classes', 'a:1:{i:0;s:0:"";}');
add_post_meta($nav_item, '_menu_item_xfn', '');
add_post_meta($nav_item, '_menu_item_url', '');
wp_set_object_terms($nav_item, 'footer-nav', 'nav_menu');
}
Ini tampaknya berhasil, tetapi:
- apakah ini cara yang kuat dan elegan untuk melakukannya?
- Apakah saya kehilangan sesuatu yang sangat jelas yang akan melakukan semua ini dalam satu baris kode?
menus
navigation
api
julien_c
sumber
sumber
Sebagai pelengkap anwser ZaMoose, berikut ini cara membuat item menu " Halaman- jenis" (bukan item " Ubahsuaian "):
Misalnya Anda hanya tahu halaman slug, misalnya.
sumber
Saya memiliki beberapa masalah dengan jawaban yang diterima - itu tidak membuatnya salah, tetapi saya akan memposting kode saya sendiri di bawah ini yang saya rasa mungkin memiliki hasil yang lebih baik untuk beberapa orang karena saya memiliki pertanyaan yang sama tetapi ingin melakukan hal yang sama hal dengan kode lebih sedikit.
Pertama, kode di atas membuat item navigasi jenis "URL", yang baik untuk beberapa orang, tetapi saya ingin menautkan ke PAGES, bukan URL karena ini adalah fitur penting dari navigasi WordPress dan klien dapat memindahkan hal-hal yang tidak terhindarkan sehingga saya tidak pernah menggunakan URL jenis item nav.
Juga, hanya sejumlah kecil anak-anak yang ditangani oleh kode yang diposting. Saya telah membuat fungsi untuk mendeklarasikan item nav baru secara rekursif, menyimpan metadata mereka yang dikembalikan (terutama ID setelah dibuat dalam loop), dan parameter untuk menerima anak-anak.
Cukup edit
$nav_items_to_add
dan sisanya ditangani secara rekursif. Ada 3 kunci yang diperlukan di setiap array. Pertama, kunci array adalah siput, demikian'shop' => array( ... )
juga yang Anda inginkan untuk halaman dengan siputshop
.['title']
adalah cara item nav akan dilabeli di ujung depan.path
adalah jalur ke halaman dalam hierarki halaman WordPress, jadi ini identik dengan siput jika halaman tersebut adalah induk level atas, dan jikashop
masih anak-anakhome
maka itu akan menjadi'path' => 'home/shop'
.Kunci array opsional terakhir adalah
['parent']
tempat Anda dapat mendeklarasikan kunci lain dalam array sebagai induk dari kunci saat ini. Penting untuk dicatat bahwa item ditambahkan secara rekursif, sehingga orang tua harus ada sebelum Anda mencoba membuat anak. Ini berarti deklarasi harus terjadi untuk item nav induk sebelum anak-anaknya.sumber
Untuk menambahkan item menu Secara terprogram. Anda dapat menghubungkan ke
wp_nav_menu_items
filter. letakkan kode di bawah ini di dalam functions.php tema Anda untuk menambahkan item menu login / logout di menu utama. 'Utama' adalah nama / id dari menu yang terdaftar.sumber