Làm thế nào để có được tiêu đề hiện tại-menu-mục như là biến?


10

Có thể lấy mục menu hiện tại làm biến php không?

Tôi đang liệt kê các bảo tàng danh mục thông qua mục menu 'bảo tàng chúng tôi hỗ trợ' vì vậy tôi muốn có được 'bảo tàng chúng tôi hỗ trợ' và hiển thị nó ở đâu đó?

Bất kỳ trợ giúp đánh giá cao!

Câu trả lời:


15

Đ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 .


xin chào Jan - chỉ tự hỏi liệu có cách nào để tạo ra một mảng các con $ menu_item-> các mặt hàng hiện tại không? Đã thử một số thứ nhưng không nhận được rất xa ..!
v3nt

quản lý điều này với sự trợ giúp của bộ lọc của bạn - câu trả lời dưới đây. Chúc mừng!
v3nt

Jan Fabry / Tôi đã thử sử dụng 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?
Steven

Có một lý do tại sao bạn mở đầu tên hàm vớ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.
Stephen Watkins

2
@Steve: Chỉ là một tiền tố duy nhất : 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.
Jan Fabry

4

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 functionvớ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;

2
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;
}

0

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đổ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ể.


hey chip - trang này của nó; bfami.modernactivity.co.uk/carget/museum vì vậy về cơ bản con mèo là 'bảo tàng' nhưng tôi muốn hiển thị 'MUSEUMS CHÚNG TÔI HPORT TRỢ' là nhãn điều hướng (tiêu đề tùy chỉnh) được đặt trong trang menu. Nghĩ rằng nó có thể để lấy đó bằng cách nào đó?
v3nt

Những sự giúp đỡ đó. Xem câu trả lời của tôi chỉnh sửa. Bạn có một vài lựa chọn: đổi tên Danh mục hoặc sử dụng wp_get_nav_menu_items().
Chip Bennett

chúc mừng chip - chỉ cần thay đổi tiêu đề danh mục cuối cùng! Chỉ cần nghĩ rằng sẽ có một cách dễ dàng để lấy nhãn menu ...
v3nt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.