✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

WordPressi õpetus: kohandatud menüü külgribal olevate postituste või lehtede jaoks

5

See postitus on mõeldud teile, kes haldate WordPressi saiti, millel on palju sisu, võib-olla palju hierarhias olevaid lehti, ja soovite paremat navigeerimist väljaspool peamenüüd. Saidil navigeerimise hõlbustamiseks aitab praeguse postitusega seotud kohandatud menüü tohutult. Menüüvidina külgribale (või kuhu iganes soovite) paigutamise probleem seisneb selles, et külgriba on tavaline. Sellest postitusest õpime, kuidas kuvada külgribal täiendavat kohandatud menüüd, lubades postitustel, lehtedel või kohandatud postituse tüüpidel menüü valida.

Lisage allolev kood oma teemasse functions.phpvõi pistikprogrammi koodi sisse.

Lubage postitustel või lehtedel menüü valida

Menüüde loomine WordPressis on lihtne ja saate küljeribal menüü kuvamiseks kasutada vidinat Menüü. Probleem on selles, et külgriba on globaalne ja kõikjal kuvatakse sama menüü. Mida teha, kui soovite, et konkreetsetel lehtedel kuvatakse kindlad menüüd? Samuti saate teada, kuidas saate tagada, et valitud menüü päranduks alamlehtedele. Nii pead valima ainult emalehel oleva menüü. Kõik alamlehed kuvavad ka sama menüüd, ilma et oleks vaja neid kõiki redigeerida.

Metaboksi lisamine menüü valimiseks

Esimene samm on postitustele või lehtedele metakasti loomine, kus saame menüü valida. Kasutame funktsiooni add_meta_box()ja otsustame, milliste postitustüüpide jaoks soovime seda näidata.

add_action('add_meta_boxes', function() { add_meta_box('metabox-sidebar-menu', __('Sidebar Menu', 'txtdomain'), 'awp_sidebar_menu_metabox_callback', ['post', 'page']); });

Kohandage ülaltoodud koodi soovitud pealkirja ja postituse tüüpide järgi. Ülaltoodud näide lisab metakasti nii postitustele kui ka lehtedele. Kolmas parameeter, mida ma nimetasin awp_sidebar_menu_metabox_callback, on funktsioon, mis vastutab metakasti sisu renderdamise eest. Defineerime selle järgmisena. Seda peame oma metakastis tegema:

function awp_sidebar_menu_metabox_callback($post) { // Get all menus   // Get the current saved menu, if set   // Output HTML with a select showing all menus, and mark the currently saved one as selected }

Kõigi WordPressi salvestatud menüüdega massiivi saame hankida rakendusega wp_get_nav_menus(). Mis puudutab praeguse valitud menüü toomist, salvestame valitud menüü postituse metana awp_sidebar_menu(nimetage seda kuidas iganes soovite) ja toome väärtuse lihtsalt selle väärtuse alusel, mis põhineb $postmeile metakasti funktsioonis. Salvestame menüü ID-d, sest see on kõik, mida vajame menüü kuvamiseks. Ja siis väljastame HTML-i valiku jaoks, mis läbib menüüsid. Metaboksi HTML-väljund on tõesti teie otsustada, allpool on näide. Lisasin turvalisuse huvides ka nonce-funktsiooni.

HTML-väljundis prindin välja sildi. Kui WordPressis pole salvestatud menüüsid üldse, kuvab see lihtsalt lõigu. Vastasel juhul luuakse valik, mille väärtusteks on menüü ID-d ja siltideks menüüde nimed. Lisan ka tühja valiku, et postitustel menüüd ei kuvataks. Kasutan WordPressi abifunktsiooni [selected](https://developer.wordpress.org/reference/functions/selected/)(), et hallata praeguse salvestatud valiku märgistamist.

Kui muudate postitust või lehte, peaksite nägema allservas metakasti, mis näitab teie valikut. Vinge! Kuid praegu ei salvesta see postituse salvestamisel teie menüüvalikut. See on järgmine samm.

Menüüvaliku salvestamine

Kasutame konksu save_post, et luua funktsioon, mis salvestab kõik valikud, mille oleme oma metakasti lisanud. Konks käivitatakse save_postiga kord, kui postitust salvestatakse või värskendatakse. Esmalt kontrollime nonce’i (kui te pole kindel, mis on nonces, vaadake seda WordPressi juhendit nonceside kohta ). Seejärel kontrollime veel kord, kas kasutajal on lubatud postitusi värskendada, ja värskendame valikuga meie postituse metat.

add_action('save_post', function($post_id) { if (!isset($_POST['awp_sidebar_menu_nonce']) || !wp_verify_nonce($_POST['awp_sidebar_menu_nonce'], 'awp_sidebar_menu_metabox_nonce')) { return; }   if (!current_user_can('edit_post', $post_id)) { return; }   update_post_meta($post_id, 'awp_sidebar_menu', $_POST['awp-sidebar-menu']); });

Nüüd, kui värskendate postitusi, salvestab see ka teie menüüvaliku.

Ja see ongi postituse valiku osa jaoks. Järgmine samm on tegelikult menüü väljastamine, kui menüü on valitud.

Kohandatud menüü positsiooni valimine

Lisan väljundi külgribale, kuid saate selle väljastada kõikjal oma teema mallides. Vajame lihtsalt kas eelnevalt määratletud konksu või määratleme enda oma. Näitena lisan külgriba ülaossa kohandatud konksu, et saaksin luua sellega seotud funktsiooni.

Võite lihtsalt wp_nav_menu()mallis otse helistada, kuid soovitan selle asemel luua kohandatud konks, kuna lisame üsna palju koodi ja see võib tunduda räpane.

Minu redigeeritavas teemas sidebar.phpja vahetult enne dynamic_sidebar()seda, kui külgribaga kutsutakse (kuhu lisatakse vidinad), lisan oma kohandatud konksu do_action()ja eesnimega. Saate seda nimetada kuidas iganes soovite, kuid see peab olema WordPressis ainulaadne. Nii et vähemalt lisage sellele midagi teie jaoks ainulaadset.

Menüü renderdamine

Nüüd saame minna tagasi juurde functions.php, määratleda funktsiooni, millega on ühendatud awp_before_sidebarja selle väljund kuvatakse külgribal enne vidinaid. Funktsioon kasutab WordPressi tingimusmärgendeid, et kontrollida, kas me näitame praegu ühte postitust või lehte või mitte. Ja kui nii, siis toon meie postituse meta. Kui postituse meta oli määratud, väljastame menüü helistades [wp_nav_menu](https://developer.wordpress.org/reference/functions/wp_nav_menu/)()ja sisestades selle menuparameetrina salvestatud menüü ID.

Peaksite kohandama menüü ümber olevat HTML-i, et see sobiks ülejäänud sisuga. Ülaltoodud koodis mähkin menüü samasse HTML-i, nagu on ümbritsetud kõik külgribal olevad vidinad, nii et teema vidina stiil rakendub meie kohandatud menüüle.

See on kõik! Kui valite postituses või lehel menüü, kuvatakse menüü selle postituse või lehe vaatamisel külgriba kohal.

Me võime siiski astuda sammu edasi. Kui soovite, et lastelehtedel kuvataks sama külgriba menüü, mis on seatud mõnele vanemale, lugege edasi.

Luba alamlehtedel vanema menüü pärida

See lisafunktsioon on mõttekas, kui teil on hierarhias palju lehti või kui teil on kohandatud postituse tüüp, mille hierarhia on sisse lülitatud. Oleks liiga tülikas redigeerida iga alamlehte ja valida sama menüü. Sel juhul on parem valida emalehel olev menüü ja lasta kõigil alamlehtedel see menüü valik automaatselt pärida. Kui mõni alamleht valib mõne muu menüü, kuvatakse üks kord pärandatud menüü asemel see menüü.

awp_before_sidebarKui vaatame ühte postitust või lehte, lisame oma funktsioonile, mis on ühendatud funktsiooniga, kooditüki .

Mida ülaltoodud kood teeb, kui praeguselt lehelt menüüd ei leitud, tõmbab kõik vanemad, kellel on [get_post_ancestors](https://developer.wordpress.org/reference/functions/get_post_ancestors/)(). See funktsioon tagastab vanempostituse ID-de massiivi, mis on järjestatud esmalt lähima vanema järgi. Kui lehel pole vanemaid (näiteks kui see on postitus), tagastatakse tühi massiiv. Ja kui vanemaid on, vaatame iga vanema ükshaaval läbi ja kontrollime, kas nad on meie postituse meta määranud. Kui selline leiti, katkestame vanemate läbimise ja $sidebar_menuseadistatakse ning menüü väljastatakse hiljem nupuga wp_nav_menu().

Ja see on "pärimise" funktsionaalsuse jaoks!

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem