เป็นไปได้ที่จะได้รับรายการเมนูปัจจุบันเป็นตัวแปร php?
ฉันกำลังแสดงรายการหมวดหมู่พิพิธภัณฑ์ผ่านรายการเมนู 'พิพิธภัณฑ์ที่เราสนับสนุน' ดังนั้นฉันต้องการได้รับ 'พิพิธภัณฑ์ที่เราสนับสนุน' บิตและแสดงที่ไหน?
ความช่วยเหลือใด ๆ ชื่นชม!
เป็นไปได้ที่จะได้รับรายการเมนูปัจจุบันเป็นตัวแปร php?
ฉันกำลังแสดงรายการหมวดหมู่พิพิธภัณฑ์ผ่านรายการเมนู 'พิพิธภัณฑ์ที่เราสนับสนุน' ดังนั้นฉันต้องการได้รับ 'พิพิธภัณฑ์ที่เราสนับสนุน' บิตและแสดงที่ไหน?
ความช่วยเหลือใด ๆ ชื่นชม!
คำตอบ:
สิ่งนี้เป็นไปได้โดยการกรองwp_nav_menu_objects
ซึ่งเป็นสถานที่ที่ง่ายที่สุดในการตรวจสอบว่ารายการใดเป็นรายการเมนูปัจจุบันเนื่องจากWordPress ได้เพิ่มคลาสสำหรับคุณแล้ว
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ( $menu_item->current ) {
$GLOBALS['wpse16243_title'] = $menu_item->title;
break;
}
}
return $sorted_menu_items;
}
ตอนนี้คุณสามารถใช้ตัวแปรโกลบอลใหม่นี้แทนชื่อปกติ ตัวอย่างง่ายๆ:
add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
if ( isset( $GLOBALS['wpse16243_title'] ) ) {
return $GLOBALS['wpse16243_title'];
}
return $cat_title;
}
แน่นอนว่าจะใช้งานได้เฉพาะเมื่อคุณแสดงเมนูก่อนที่จะแสดงชื่อ หากคุณจำเป็นต้องใช้มันก่อนหน้านี้ (อาจจะใน<title>
องค์ประกอบ?) คุณควรแรกทำให้เมนูและจากนั้นจะแสดงได้ในภายหลัง
wpse16243_wp_nav_menu_objects
เพื่อดึง ID เมนูปัจจุบัน แต่มันก็ไม่สอดคล้องกัน การสลับระหว่างโฮมเพจและรายการเมนูจะไม่ให้รายการเมนูที่ถูกต้องกับฉันเสมอ - มันเป็น "lags" ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีที่ฉันสามารถดึง ID เมนูปัจจุบันได้?
wpse16243
หรือไม่? ฉันเห็นชื่อแปลก ๆ นี้ค่อนข้างธรรมดาและสงสัยว่ามันคืออะไร ข้อจำกัดความรับผิดชอบ: Wordpress noob
WordPress Stack Exchange question number 16243
. หากผู้คนคัดลอกรหัสนี้โดยตรงมันจะไม่ขัดแย้งกับปลั๊กอินอื่น ๆ ที่อาจใช้ชื่อฟังก์ชั่นเดียวกัน
wp_get_nav_menu_items()
คุณสามารถใช้ นี่คือตัวอย่างfunction
:
<?php
function my_get_menu_item_name( $loc ) {
global $post;
$locs = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locs[$loc] );
if($menu) {
$items = wp_get_nav_menu_items($menu->term_id);
foreach ($items as $k => $v) {
// Check if this menu item links to the current page
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
จากนั้นโทรfunction
ด้วยชื่อตำแหน่งของเมนู nav ที่คุณต้องการใช้:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'
echo $menu_name;
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ($menu_item->current ) {
$GLOBALS['currentMenuTitle'] = $menu_item->title;
$GLOBALS['currentMenuID'] = $menu_item->ID;
break;
}
}
return $sorted_menu_items;
}
function get_menu_items_children( $menu_item_id='' )
{
global $wpdb;
// AND meta_key='_menu_item_menu_item_parent'
$myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );
foreach ( $myrows as $menu_item ) {
$sc = get_object_vars($menu_item);
$myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );
foreach ( $myrowsb as $menu_itemb ) {
$scb = get_object_vars($menu_itemb);
$pmIDs[] = $scb['meta_value'];
}
}
return $pmIDs;
}
ฉันไม่แน่ใจว่าฉันทำตามอย่างแน่นอน
"พิพิธภัณฑ์ที่เราให้การสนับสนุน" สร้างขึ้นโดยชื่อโพสต์ชื่อหน้าชื่อหมวดหมู่ ฯลฯ (หรือหากคุณใช้เมนูการนำทางที่กำหนดเองอาจเป็นชื่อที่กำหนดเองได้)
คุณพยายามทำอะไรกับข้อความนี้ คุณพยายามแสดงที่ไหน ฉันคิดว่าคุณพยายามที่จะแสดงมันในหน้าดัชนีหมวดหมู่ (เนื่องจากคุณระบุว่าเป็นcurrent-menu-item
) ถ้าเป็นเช่นนั้นเพียงโทร<?php single_cat_title(); ?>
ออกชื่อหมวดหมู่
หากคุณต้องการข้อมูลหมวดหมู่เพิ่มเติมคุณสามารถใช้สิ่งต่อไปนี้:
$cat = get_the_category();
$currentcat = $cat[0];
ซึ่งทำให้พร้อมใช้งานตัวแปรต่อไปนี้:
$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)
หากคุณอยู่ที่อื่นนอกเหนือจากหน้าดัชนีหมวดหมู่คุณจะต้องส่ง $ catid ไปยังฟังก์ชันเหล่านี้
แก้ไข:
เนื่องจากคุณระบุว่า "พิพิธภัณฑ์ที่เราให้การสนับสนุน" เป็นชื่อเมนูที่กำหนดเองวิธีที่ง่ายที่สุดคือเปลี่ยนชื่อหมวดหมู่จาก "พิพิธภัณฑ์" เป็น "พิพิธภัณฑ์ที่เราให้การสนับสนุน" (หมายเหตุ: คุณสามารถออกจากกระสุนได้museums
โดยไม่เปลี่ยนแปลง) อย่างไรก็ตามการทำเช่นนั้นหมายความว่า "พิพิธภัณฑ์ที่เราให้การสนับสนุน" จะปรากฏเป็นชื่อหมวดหมู่ไม่ว่าที่ใดก็ตามที่อาจแสดงผลในเทมเพลตของคุณ หากเป็นที่ยอมรับก็ไม่ต้องกังวล
มิฉะนั้นคุณจะต้องใช้สิ่งที่ต้องการwp_get_nav_menu_items()
(การอ้างอิง Codex ) เพื่อที่จะคว้าชื่อสำหรับรายการเมนูที่เฉพาะเจาะจง
wp_get_nav_menu_items()
เปลี่ยนชื่อหมวดหมู่หรือการใช้งาน