แถบนำทางโดยใช้ CSS การสร้างเมนูแบบกำหนดเองใน WordPress ฟังก์ชั่น wp_nav_menu
ลงทะเบียนและแสดงเมนูแบบกำหนดเองที่สร้างขึ้นในแผงควบคุม: ลักษณะที่ปรากฏ > เมนู
การลงทะเบียนเมนู
Add_action("after_setup_theme", function())( register_nav_menus(array("main_menu" => __("เมนูหลัก", "crea"), "foot_menu" => __("เมนูส่วนท้าย", "crea"),) ) ; ));
ตัวเลือกที่สองในการลงทะเบียนเมนู (ไม่รู้ว่าถูกต้องแค่ไหนจึงควรใช้ตัวเลือกแรกดีกว่า)
ถ้า (function_exists("register_nav_menu")) ( register_nav_menus(array("main_menu" => __("เมนูหลัก", "crea"), "foot_menu" => __("เมนูส่วนท้าย", "crea"),)) ; )
การแสดงเมนู
ตัวเลือกเมนูที่สอง
รายละเอียดเพิ่มเติมเกี่ยวกับการลงทะเบียนและการแสดงเมนูในเทมเพลต
การใช้งาน
wp_nav_menu(array("theme_location" => "" // (string) ตำแหน่งของเมนูในเทมเพลต (ระบุคีย์ที่เมนูลงทะเบียนในฟังก์ชัน "menu" => "", // (string ) ชื่อของเมนูที่แสดง (ระบุไว้ในแผงผู้ดูแลระบบเมื่อสร้างเมนู โดยจะมีลำดับความสำคัญเหนือตำแหน่งที่ระบุ theme_location - หากระบุ พารามิเตอร์ theme_location จะถูกละเว้น) "container" => "div", // (string) Wrapper เมนู มีการระบุแท็กคอนเทนเนอร์ (โดยค่าเริ่มต้นในแท็ก div) "container_class" " => "", // (สตริง) คลาสของคอนเทนเนอร์ (แท็ก div) "container_id" => "", // (string ) id ของคอนเทนเนอร์ (แท็ก div) "menu_class" => "menu", // (string) คลาสของเมนูเอง (แท็ก ul) "menu_id" => "", // (string) id ของเมนูเอง (ul tag) "echo" => true, // (boolean) แสดงหรือส่งคืนสำหรับการประมวลผล "fallback_cb" = > "wp_page_menu", // (string) ฟังก์ชั่น (สำรอง) ที่จะใช้หากไม่มีเมนู (สามารถ ไม่ได้รับ) "before" => "", // (string) ข้อความก่อนหน้า แต่ละลิงก์ "หลัง" => "", // (สตริง) ข้อความหลังแต่ละลิงก์ "link_before" => "", // (string) ข้อความก่อนจุดยึด (ข้อความ) ของลิงก์ "link_after" => "", // (string) ข้อความหลังจุดยึด (ข้อความ) ของลิงก์ "items_wrap " => "", "ความลึก" => 0, // (จำนวนเต็ม) ความลึกของการซ้อน (0 - ไม่ จำกัด , 2 - เมนูสองระดับ) "walker" => "" // (วัตถุ) คลาสที่รวบรวมเมนู ค่าเริ่มต้น: ใหม่ Walker_Nav_Menu));
อาร์กิวเมนต์พารามิเตอร์ $args
theme_location (สตริง)
ID ของตำแหน่งเมนูในเทมเพลต ตัวระบุที่ระบุเมื่อลงทะเบียนเมนูโดยใช้ฟังก์ชัน register_nav_menu()
ค่าเริ่มต้น: ""
เมนู(สตริง)
เมนูที่ต้องแสดง Match: id, slug หรือชื่อเมนู
ค่าเริ่มต้น: ""
คอนเทนเนอร์ (สตริง)
วิธีพันแท็ก ul ยอมรับได้: div หรือ nav
หากคุณไม่จำเป็นต้องห่อด้วยสิ่งใดเลย ให้เขียนว่า false: container => false
ค่าเริ่มต้น: div
คอนเทนเนอร์_คลาส (สตริง)
ค่าของแอตทริบิวต์คลาสของคอนเทนเนอร์เมนู
ค่าเริ่มต้น: เมนู-(เมนูกระสุน)-คอนเทนเนอร์
container_id(สตริง)
ค่าของแอตทริบิวต์ id ของคอนเทนเนอร์เมนู
ค่าเริ่มต้น: ""
เมนู_คลาส (สตริง)
ค่าของแอตทริบิวต์คลาสของแท็ก ul
ค่าเริ่มต้น: เมนู
menu_id(สตริง)
ค่าของแอตทริบิวต์ id ของแท็ก ul
ค่าเริ่มต้น: เมนูทาก
เสียงสะท้อน (บูลีน)
พิมพ์ไปที่หน้าจอ (จริง) หรือส่งคืนเพื่อประมวลผล (เท็จ)
ค่าเริ่มต้น: จริง
fallback_cb (สตริง)
ฟังก์ชันสำหรับประมวลผลเอาต์พุตหากไม่พบเมนู
ส่ง $args ทั้งหมดไปยังฟังก์ชันที่ระบุที่นี่
ตั้งค่าสตริงว่างเป็น " หรือ '__return_empty_string' เพื่อไม่ให้แสดงอะไรเลยหากไม่มีเมนู
ค่าเริ่มต้น: wp_page_menu
ก่อน (สตริง)
ข้อความก่อนแท็ก บนเมนู
ค่าเริ่มต้น: ""
หลังจาก (สตริง)
ข้อความหลังแต่ละแท็กในเมนู
ค่าเริ่มต้น: ""
link_before (สตริง)
ข้อความที่อยู่หน้าจุดยึดของแต่ละลิงก์ในเมนู
ค่าเริ่มต้น: ""
link_after (สตริง)
ข้อความหลังจุดยึดของแต่ละลิงก์ในเมนู
ค่าเริ่มต้น: ""
items_wrap (สตริง)
ฉันจำเป็นต้องรวมองค์ประกอบไว้ในแท็ก ul หรือไม่ หากจำเป็น ให้ระบุเทมเพลต wrapper
ค่าเริ่มต้น: ""
ความลึก(จำนวน)
จำนวนลิงก์ที่ซ้อนกันที่จะแสดง 0 - ทุกระดับ
วอล์คเกอร์ (วัตถุ)
คลาสที่จะใช้ในการสร้างเมนู คุณต้องระบุออบเจ็กต์ ไม่ใช่สตริง เช่น new My_Menu_Walker() ค่าเริ่มต้น: Walker_Nav_Menu() ดูวิธีใช้ด้านล่าง...
ค่าเริ่มต้น: Walker_Nav_Menu
item_spacing (สตริง)
ว่าจะเว้นบรรทัดใหม่ในโค้ดเมนู HTML หรือไม่ อาจเป็น: เก็บรักษาหรือทิ้ง
ค่าเริ่มต้น: "เก็บรักษา"
ตัวอย่าง
แสดงเมนูเฉพาะในกรณีที่มีอยู่
ตามค่าเริ่มต้น หากไม่มีเมนู หน้าเว็บไซต์จะแสดงแทน แต่หากคุณต้องการแสดงเมนูเฉพาะเมื่อสร้างขึ้นในแผงผู้ดูแลระบบ ให้ระบุพารามิเตอร์ fallback_cb เป็น "__return_empty_string" :
Wp_nav_menu(array("theme_location" => "primary-menu", "fallback_cb" => "__return_empty_string"));
เราขอเชิญชวนให้คุณทำความคุ้นเคยกับเทคนิคใหม่ในการสร้างเมนูแบบตอบสนอง (ปรับเปลี่ยนได้) โดยไม่ต้องใช้ Javascript ใช้มาร์กอัป HTML5 ที่สะอาดและมีความหมาย เมนูสามารถจัดชิดซ้าย กึ่งกลาง หรือขวาได้ เมนูนี้จะเปิดโฮเวอร์ ซึ่งสะดวกกว่าสำหรับผู้ใช้ นอกจากนี้ยังมีตัวบ่งชี้ที่แสดงรายการเมนู "กำลังทำงาน/เธรด" ใช้งานได้กับเบราว์เซอร์มือถือและเดสก์ท็อปทั้งหมด รวมถึง Internet Explorer!
เป้า
จุดประสงค์ของบทช่วยสอนนี้คือเพื่อแสดงวิธีเปลี่ยนเมนูปกติให้เป็นเมนูแบบเลื่อนลงบนจอแสดงผลขนาดเล็ก
เคล็ดลับนี้จะมีประโยชน์มากขึ้นสำหรับการนำทางที่มีลิงก์จำนวนมาก เช่น ในภาพหน้าจอด้านล่าง คุณสามารถย่อปุ่มทั้งหมดให้กลายเป็นเมนูแบบเลื่อนลงที่สวยงามได้
มาร์กอัปนำทาง HTML
นี่คือมาร์กอัปสำหรับการนำทาง แท็กนี้จำเป็นในการสร้างเมนูแบบเลื่อนลงที่มีคุณสมบัติ CSS ตำแหน่งที่แน่นอน เราจะอธิบายเรื่องนี้ในบทเรียนในภายหลัง คลาส .current ชี้ไปที่ลิงก์เมนูที่ใช้งานอยู่/ปัจจุบัน
- ผลงาน
- ภาพประกอบ
- การออกแบบเว็บไซต์
- สื่อสิ่งพิมพ์
- การออกแบบกราฟิก
CSS สำหรับการนำทาง (มุมมองเดสก์ท็อป) ค่อนข้างพื้นฐาน ดังนั้นเราจะไม่ลงรายละเอียดมากเกินไปที่นี่ โปรดทราบว่าเราได้ระบุ display:inline-block แทน float:left ใน NAV ขององค์ประกอบ
- องค์ประกอบ.
- ระบุ display:none แต่ออกจาก .current
- แสดงเป็นบล็อก จากนั้นเมื่อโฮเวอร์ NAV เราก็ตั้งค่าทุกอย่าง
- to display:block (ซึ่งจะให้ผลลัพธ์ของรายการแบบเลื่อนลง) เราได้เพิ่มไอคอนกราฟิกให้กับองค์ประกอบ check.current เพื่อระบุว่าองค์ประกอบนั้นทำงานอยู่ หากต้องการจัดตำแหน่งเมนูให้อยู่กึ่งกลางและขวา ให้ใช้คุณสมบัติการวางตำแหน่งด้านซ้ายและขวา
- รายการ.
- รายการ */ ระยะขอบ: 0; ) .nav .current ( display: block; /* แสดงเฉพาะกระแสเท่านั้น
- รายการ */ ) .nav a ( display: block; padding: 5px 5px 5px 32px; text-align: left; ) .nav .current a ( พื้นหลัง: none; color: #666; ) /* บน nav hover */ nav ul:hover ( ภาพพื้นหลัง: none; ) .nav ul:hover li ( จอแสดงผล: block; ระยะขอบ: 0 0 5px; ) .nav ul:hover .current ( พื้นหลัง: url(images/icon-check.png) ไม่ทำซ้ำ 10px 7px; ) /* right nav */ .nav.right ul ( ซ้าย: auto; ขวา: 0; ) /* center nav */ .nav.center ul ( ซ้าย: 50%; ขอบซ้าย: - 90px;
การแปลงสูง!
ในบทความบล็อกก่อนหน้านี้ ฉันเขียนเกี่ยวกับนวัตกรรมที่น่าสนใจของ WordPress เวอร์ชันล่าสุด ซึ่งเป็นกลไกพิเศษสำหรับการสร้างและจัดการ . ตอนนี้ผู้ใช้ทั่วไปสามารถสร้างเมนูที่มีความซับซ้อนแตกต่างกันได้สะดวกและง่ายขึ้นมากซึ่งอาจประกอบด้วยหน้าหรือหมวดหมู่บล็อกไม่เพียง แต่ยังมีลิงก์ไปยัง URL ใด ๆ อีกด้วย ในการแสดงเมนูในเทมเพลตจะใช้ฟังก์ชันพิเศษ wp_nav_menu - ฉันจะเล่าให้คุณฟังวันนี้
หากไม่มีส่วนเมนูในผู้ดูแลระบบ WordPress คุณสามารถเปิดใช้งานได้โดยเพิ่มโค้ดพิเศษลงในไฟล์ function.php
อันดับแรกคือชื่อเมนูที่เราสร้างขึ้น นี่คือการใช้ฟังก์ชันในกรณีทั่วไปที่ไม่มีวิดเจ็ต คุณจะต้องทำงานกับฟังก์ชันเหล่านี้แตกต่างออกไปเล็กน้อย อย่างไรก็ตาม ฟังก์ชัน wp_nav_menu สามารถส่งออกได้โดยไม่มีอาร์กิวเมนต์ ซึ่งเป็นผลมาจากสถานการณ์ที่แตกต่างกันจะถูก "ตรวจสอบ" - ขั้นแรกให้จับคู่ตามชื่อเมนู หากมีการระบุรายการเมนูอย่างน้อยหนึ่งรายการ มิฉะนั้น เมนูที่ไม่ว่างเปล่า ก็จะปรากฏขึ้น ฯลฯ . ฉันขอแนะนำให้คุณใช้โค้ดด้านบนและอย่าคิดว่าฟังก์ชันใดที่ปราศจากข้อโต้แย้งควรแสดงผล ไวยากรณ์ของมันมีดังนี้:
ที่นี่ใช้พารามิเตอร์ต่อไปนี้:
$menu - ตัวระบุที่เลือกสำหรับเมนู - ID, กระสุนหรือชื่อเมนู
$container - เมนู UL เริ่มต้นคือ "รวม" ในคอนเทนเนอร์ DIV โดยใช้การตั้งค่านี้
$container_class - ระบุคลาสของคอนเทนเนอร์ โดยค่าเริ่มต้นแล้วค่าคือ menu-(menu slug)-container นั่นคือในกรณีของเรา ตัวอย่างเช่น คลาสจะเป็น menu-first-container
$container_id - คุณสามารถเพิ่ม ID ลงในคอนเทนเนอร์ได้ โดยไม่ได้ระบุเป็นค่าเริ่มต้น
$menu_class เป็นคลาสสำหรับองค์ประกอบเมนู UL ค่าของมันคือเมนู
$menu_id — ID สำหรับองค์ประกอบ ul ค่าเริ่มต้นคือเมนู-(กระสุน)
$echo - หากคุณไม่ต้องการแสดงเมนู แต่คืนค่าของฟังก์ชัน ให้ใช้ 0 สำหรับการตั้งค่านี้
$fallback_cb - หากไม่มีเมนู ฟังก์ชัน wp_page_menu จะถูกเรียกใช้
$before - ตั้งค่าข้อความที่แสดงก่อนลิงก์ A
$link_before — แสดงวลีก่อนข้อความลิงก์ โดยไม่ได้ระบุ
$link_after — แสดงหลังข้อความลิงก์ และว่างเปล่าเช่นกัน
$ความลึก - กำหนดจำนวนระดับลำดับชั้นเพื่อแสดงเมนู ค่าเริ่มต้นคือ 0 จะแสดงเมนูทั้งหมด
$walker - "วัตถุวอล์คเกอร์" แบบกำหนดเองที่ไม่สามารถเข้าใจได้บางประเภทซึ่งอาจเป็นที่ต้องการของนักพัฒนาขั้นสูงมากกว่า
$theme_location - ตำแหน่งของธีมที่จะใช้เมนูจะต้องเปิดใช้งานผ่าน register_nav_menu() เพื่อให้ผู้ใช้สามารถเลือกได้ นอกจากนี้ยังมีการตั้งค่าบางอย่างที่ไม่ชัดเจนเมื่อทำงานกับวิดเจ็ต
ตัวอย่างการใช้ฟังก์ชัน wp_nav_menuรหัสที่ง่ายที่สุดที่ให้ไว้ในรหัสคือ:
กำลังนำคอนเทนเนอร์ DIV ออกจากเมนู
โดยหลักการแล้ว ไม่มีอะไรซับซ้อนในการสร้างและจัดการเมนู WordPress 3.0 นักพัฒนาได้ทำให้ขั้นตอนการทำงานง่ายขึ้นอย่างมากและขยายขีดความสามารถขององค์ประกอบการนำทางนี้ โซลูชันนี้มักใช้ในงานเทมเพลตที่หลากหลาย เช่น เมื่อสร้างเวอร์ชันมือถือและเดสก์ท็อป หลังจากนั้นฉันจะเพิ่มตัวอย่างอีกสองสามหัวข้อในหัวข้อนี้
ป.ล. อารักขา. บล็อกที่น่าสนใจและมีประโยชน์สำหรับเว็บมาสเตอร์เกี่ยวกับ SEO ซึ่งคุณจะพบคำตอบสำหรับคำถามของคุณเกี่ยวกับ SEO
บริษัท Aweb ได้สร้างชื่อเสียงมายาวนานในด้านการส่งเสริมเว็บไซต์ การเพิ่มประสิทธิภาพ และการส่งเสริมเครื่องมือค้นหาบนอินเทอร์เน็ต
หน้าจอ @media และ (ความกว้างสูงสุด: 600px) ( .nav ( ตำแหน่ง: สัมพันธ์; ความสูงขั้นต่ำ: 40px; ) .nav ul ( ความกว้าง: 180px; การขยาย: 5px 0; ตำแหน่ง: สัมบูรณ์; ด้านบน: 0; ซ้าย: 0 ; เส้นขอบ: ทึบ 1px #aaa; พื้นหลัง: #fff url(images/icon-menu.png) ไม่ซ้ำ 10px 11px; รัศมีเส้นขอบ: 0 1px 2px rgba(0,0,0,. 3); .navli ( แสดง: ไม่มี; /* ซ่อนทั้งหมด
/* nav */ .nav ( ตำแหน่ง: สัมพันธ์; ระยะขอบ: 20px 0; ) .nav ul ( ระยะขอบ: 0; การขยาย: 0; ) .nav li ( ระยะขอบ: 0 5px 10px 0; การขยาย: 0; สไตล์รายการ: none; display: inline-block; ) .nav a ( การขยาย: 3px 12px; การตกแต่งข้อความ: none; color: #999; line-height: 100%; ) .nav a:hover ( color: #000; ) nav .current a ( พื้นหลัง: #999; สี: #fff; รัศมีเส้นขอบ: 5px; )
การจัดตำแหน่งตรงกลางและด้านขวา
ตามที่กล่าวไว้ข้างต้น คุณสามารถเปลี่ยนการจัดตำแหน่งปุ่มได้โดยใช้ "การจัดตำแหน่งข้อความ"
/* right nav */ .nav.right ul ( text-align: right; ) /* center nav */ .nav.center ul ( text-align: center; )
รองรับอินเตอร์เน็ตเอ็กซ์พลอเรอร์
แท็ก HTML5 และการสืบค้นสื่อไม่ได้รับการสนับสนุนโดย Internet Explorer 8 และเวอร์ชันที่เก่ากว่า รวม CSS3-mediaqueries.js (หรือ response.js) และ html5shim.js เพื่อให้การสนับสนุนทางเลือก หากคุณไม่ต้องการเพิ่ม html5shim.js ให้แทนที่แท็กด้วยแท็ก
นี่คือจุดเริ่มต้นของความสนุก - ทำให้เมนูตอบสนองต่อคำสั่งสื่อ! ที่ 600px เราตั้งค่าองค์ประกอบ nav ให้อยู่ในตำแหน่งที่สัมพันธ์กันเพื่อให้เราสามารถวางได้
- รายการเมนูด้านบนพร้อมตำแหน่งที่แน่นอน เราได้ซ่อนองค์ประกอบทั้งหมดไว้