Câu trả lời:
Điều này có thể bằng cách lọc wp_nav_menu_objects
, đây là nơi dễ nhất để kiểm tra mục nào là mục trình đơn hiện tại, vì WordPress đã thêm các lớp cho bạn .
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;
}
Bây giờ bạn có thể sử dụng biến toàn cầu mới này thay vì tiêu đề bình thường. Ví dụ đơn giản:
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;
}
Tất nhiên, điều này chỉ hoạt động nếu bạn hiển thị menu trước khi bạn hiển thị tiêu đề. Nếu bạn cần nó sớm hơn (có thể trong <title>
phần tử?), Trước tiên bạn nên kết xuất menu và sau đó hiển thị nó sau .
wpse16243_wp_nav_menu_objects
để lấy ID menu hiện tại. Nhưng nó không nhất quán. Chuyển đổi giữa trang chủ và một mục menu không nto luôn cung cấp cho tôi mục menu chính xác - đó là loại "độ trễ". Bất kỳ đề nghị về cách tôi có thể lấy ID menu hiện tại?
wpse16243
? Tôi thấy loại tên lạ này khá phổ biến và tự hỏi nó là gì. Tuyên bố từ chối trách nhiệm: Wordpress noob.
WordPress Stack Exchange question number 16243
. Nếu mọi người sao chép trực tiếp mã này, nó sẽ không xung đột với các plugin khác có thể chia sẻ cùng tên hàm.
Bạn có thể sử dụng wp_get_nav_menu_items()
. Đây là một mẫu 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;
}
Sau đó gọi function
với tên vị trí của menu nav bạn muốn sử dụng:
<?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;
}
Tôi không chắc chắn chính xác tôi làm theo.
"Bảo tàng chúng tôi hỗ trợ" được tạo bởi Tiêu đề bài viết, Tiêu đề trang, Tiêu đề danh mục, v.v. (hoặc, nếu bạn đang sử dụng Menu điều hướng tùy chỉnh, nó có thể là Tiêu đề tùy chỉnh).
Bạn đang cố gắng làm gì với văn bản này? Bạn đang cố gắng hiển thị nó ở đâu? Tôi giả sử bạn đang cố gắng hiển thị nó trên Trang mục lục danh mục (vì bạn cho biết là vậy current-menu-item
)? Nếu vậy, chỉ cần gọi <?php single_cat_title(); ?>
để xuất Tiêu đề.
Nếu bạn cần thêm thông tin danh mục, bạn có thể sử dụng một cái gì đó như:
$cat = get_the_category();
$currentcat = $cat[0];
Điều này làm cho có sẵn các biến sau:
$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)
Nếu bạn ở một nơi nào khác ngoài Trang chỉ mục danh mục, bạn sẽ cần chuyển $ catid cho các chức năng này.
BIÊN TẬP:
Vì bạn đã chỉ ra rằng "Bảo tàng chúng tôi hỗ trợ" là Tiêu đề Menu tùy chỉnh, cách tiếp cận đơn giản nhất là đổi tên Danh mục từ "Bảo tàng" thành "Bảo tàng chúng tôi hỗ trợ" (lưu ý: bạn có thể rời khỏi sên museums
, không thay đổi). Tuy nhiên, làm như vậy có nghĩa là "Bảo tàng chúng tôi hỗ trợ" sẽ được hiển thị dưới dạng Tiêu đề danh mục ở bất kỳ nơi nào khác có thể là đầu ra trong mẫu của bạn. Nếu điều đó được chấp nhận, thì không phải lo lắng.
Nếu không, bạn sẽ phải sử dụng một cái gì đó như wp_get_nav_menu_items()
( Codex ref ) để lấy Tiêu đề cho mục menu cụ thể.
wp_get_nav_menu_items()
.