Nhận mục menu chính WordPress

Gần đây, tôi cần lấy tất cả phần tử con (cùng với phần tử gốc) của một mục menu điều hướng cụ thể. Vì các trang có thể làm điều này rất tốt nên tôi đã xem xét hàm get_page_children(). Vì vậy, tôi đã sửa đổi chức năng đó để tạo get_nav_menu_item_children(). Tôi đã đề xuất điều này cho lõi WordPress (vé). Quan điểm của bạn là gì?

Trình tạo menu trong WordPress rất tuyệt, tuy nhiên tôi thường thấy mình cần tạo một menu phụ trên các trang, chỉ chứa một tập hợp con của menu. Trong trường hợp của tôi, các quy tắc rất đơn giản. khi xem một trang cấp cao nhất, chúng tôi muốn liệt kê tất cả các trang con được lồng bên dưới nó. Khi xem trang cấp hai, chúng tôi muốn liệt kê tất cả các trang anh chị em được lồng trong cùng một trang mẹ. Chúng tôi chỉ có thể sử dụng wp_list_pages và lọc theo phụ huynh, nhưng nó sẽ không khớp với cấu trúc được thiết kế trong trình tạo menu

Đáng ngạc nhiên là có rất ít thông tin hoặc giải pháp hiệu quả cho vấn đề này, vì vậy tôi đã tập hợp đoạn mã sau để thực hiện chính xác những gì chúng tôi muốn

Để cung cấp cho bạn ý tưởng về cách nó hoạt động với các tùy chọn mặc định, hãy tưởng tượng bạn có một menu như thế này

- MỘT
– – B
- - C
– Đ

Nếu bạn đang ở trang A, bạn sẽ thấy B và C trong menu (A là trang cấp cao nhất nên trang này hiển thị cho trẻ em). Nếu bạn đang ở B hoặc C, một lần nữa, bạn sẽ thấy B và C (B và C là các trang cấp hai, do đó, nó hiển thị anh chị em)

Xin chân thành cảm ơn Thomas Dexter đã vui lòng chỉ ra cách sử dụng wp_nav_menu, cách này bổ sung các lớp wp chính xác và cho phép chúng tôi sử dụng khung tập đi tùy chỉnh và những thứ tương tự. Sử dụng mã của anh ấy và móc do , tôi đã tạo một bộ lọc hoạt động hoàn toàn dựa trên cấu trúc menu (không liên quan đến cấu trúc trang). Vì vậy, tất cả những gì bạn cần làm là thả cái này vào hàm của bạn. php (nhớ xóa thẻ mở

Sau đó, bạn có thể hiển thị nó trong chủ đề của mình bằng cách sử dụng wp_nav_menu (giống như cách bạn thường làm), bằng cách chuyển tham số sub_menu để kích hoạt hook sub_menu tùy chỉnh

Nếu bạn đã sao chép và dán đoạn mã trên, đừng quên thay đổi Tên Menu thành sên hoặc tên menu của bạn

Theo mặc định, nếu bạn có nhiều cấp độ lồng nhau, mã này sẽ lọc menu theo cấp độ cao nhất tuyệt đối. Nếu bạn muốn menu đi sâu vào động bằng cách lọc menu dựa trên cha mẹ trực tiếp, hãy chuyển tham số “direct_parent” => true cho lệnh gọi wp_nav_menu

Nếu bạn muốn bao gồm phần tử cha/gốc trong menu, bạn có thể chuyển vào tham số “show_parent” => true để hiển thị mục cấp gốc

Tất nhiên, bạn cũng có thể tiếp tục sử dụng các tham số wp_nav_menu tiêu chuẩn. Ví dụ: nếu bạn muốn giới hạn số lượng phần tử con lồng nhau được hiển thị, bạn có thể sử dụng tham số độ sâu. Hoặc bạn không muốn hiển thị menu thì có thể sử dụng tham số echo

Chúng tôi thường được hỏi cách tạo chức năng cụ thể với WordPress. Mặc dù WordPress là một nền tảng tuyệt vời và có rất nhiều tính năng tuyệt vời, nhưng có một số thứ không nhất thiết phải quá trực quan

Một ví dụ là tạo các mục chính trong menu tùy chỉnh không liên kết đến một trang. Chẳng hạn, trong menu ở đây trên WP SuperGeek, chúng tôi có một mục gốc có tên là “Become Fearless” không liên kết đến một trang – thay vào đó, nó chỉ đóng vai trò là tiêu đề cho các mục menu con bên dưới nó

Nhận mục menu chính WordPress

Để đạt được chức năng này trong WordPress, bạn sẽ cần thực hiện một thủ thuật nhỏ nhưng hiệu quả khi quản lý menu tùy chỉnh của mình. Dưới đây là các bước

1. Chuyển đến trình chỉnh sửa Menu

Trong quản trị viên WordPress của bạn, điều hướng đến Giao diện>Menu

Nhận mục menu chính WordPress

2. Thêm mục gốc

Khi bạn đang ở trong màn hình Menu, hãy nhấp vào tiêu đề “Liên kết” ở phía bên tay trái để thêm liên kết mới. Nhập bất kỳ URL nào vào trường “URL” (hoặc bạn chỉ có thể sử dụng dấu thăng/pound #) và văn bản bạn muốn xuất hiện trong menu trong trường “Văn bản liên kết”. Nhấp vào “Thêm vào Menu. ”

Nhận mục menu chính WordPress

3. Mở chi tiết liên kết

Khi liên kết của bạn được thêm vào, nó sẽ xuất hiện ở cuối menu của bạn. Mở thông tin chi tiết bằng cách nhấp vào tam giác hiển thị ở bên phải tiêu đề

Nhận mục menu chính WordPress

 

 

4. Xóa liên kết và định vị mục

Sau đó, bạn có thể xóa URL hoặc dấu thăng/pound để mặt hàng không liên kết với bất kỳ thứ gì. Sau đó, kéo mục menu đến vị trí thích hợp trong menu của bạn. Sau đó, bạn có thể thêm các mục con bên dưới nó

Tôi đã thêm các liên kết con vào mục menu chính và hiện tại mục chính không thể liên kết được. Cần cha mẹ vẫn có thể nhấp được. Thanks

Trang tôi cần trợ giúp. [đăng nhập để thấy link]

Đang xem 3 trả lời - 1 đến 3 (trong tổng số 3)

  • Steven (LyraTheme)

    (@stevenlyrathemes)

    Xin chào @phoenixim,

    Tôi xin lỗi vì đã trả lời muộn - có vẻ như chúng tôi không nhận được thông báo về bài đăng của bạn vì một số lý do

    Hiện tại không có tùy chọn để thay đổi hành vi này, nhưng nếu bạn đang sử dụng một chủ đề con thì có thể thực hiện được với một chút điều chỉnh

    Nếu bạn có một chủ đề con đang hoạt động và cảm thấy thoải mái khi thực hiện một vài chỉnh sửa cẩn thận đối với mã, hãy cho tôi biết và tôi có thể viết ra các bước cần thiết

    Cảm ơn bạn đã liên lạc và tôi xin lỗi một lần nữa vì sự chậm trễ

    Trình bắt đầu chủ đề phoenixim

    (@phoenixim)

    Xin chào Steven,

    Tôi có một chủ đề con và có thể chỉnh sửa nó để bất kỳ bước nào cũng có ích. Thanks

    cướp

    Steven (LyraTheme)

    (@stevenlyrathemes)

    Chào cướp,

    Tôi rất xin lỗi- chúng tôi đã không nhận được thông báo nữa, mặc dù chúng tôi đã đăng ký chủ đề này

    Nếu bạn vẫn cần chức năng này, đây là các bước để đạt được nó

    1. Sao chép (không di chuyển) /includes/wp_bootstrap_navwalker. php từ chủ đề gốc của bạn vào cùng một vị trí trong chủ đề con của bạn

    2. Trong bản sao con của tệp này, hãy thay thế mã này ở dòng 128

    // If item has_children add atts to a.
    if ( $args->has_children && $depth === 0 ) {
    	$atts['href'] = '#';
    	$atts['data-toggle'] = 'dropdown';
    	$atts['class'] = 'dropdown-toggle';
    	$atts['aria-haspopup'] = 'true';
    	$atts['aria-expanded'] = 'false';
    } else {
    	$atts['href'] = ! empty( $item->url ) ? $item->url : '';
    }

    Với mã này

    //For clickable parent nodes
    if ( $args->has_children && $depth === 0 ) {
    	$atts['class'] = 'dropdown-toggle';
    	$atts['aria-haspopup'] = 'true';
    	$atts['aria-expanded'] = 'false';
    }
    $atts['href'] = ! empty( $item->url ) ? $item->url : '';

    3. Trong chức năng con của bạn. php, hãy thêm dòng này ngay sau thẻ mở PHP
    require get_theme_file_path('/includes/wp_bootstrap_navwalker.php');

    Nếu bạn gặp bất kỳ sự cố nào, hãy cho chúng tôi biết- Tôi sẽ cố gắng theo dõi chủ đề này theo cách thủ công vì chúng tôi không nhận được thông báo