Plugin Nav Menu Roles miễn phí

Giới thiệu về plugin Nav Menu Roles

Nav Menu Roles là một plugin cho phép bạn ẩn các mục menu tùy theo vai trò người dùng. Điều này có nghĩa là bạn có thể chỉ hiển thị một liên kết trong menu cho người dùng đã đăng nhập, nhóm người dùng cụ thể hoặc chỉ cho những người dùng chưa đăng nhập. Plugin này rất linh hoạt và cho phép tùy chỉnh chức năng bằng cách thêm các hộp kiểm tùy chỉnh vào menu sử dụng bộ lọc nav_menu_roles và sử dụng bộ lọc nav_menu_roles_item_visibility để kiểm tra các tiêu chí cần thiết.

Chú ý quan trọng

Plugin Nav Menu Roles không hạn chế quyền truy cập vào nội dung. Nó chỉ dùng để ẩn/hiển thị các mục menu. Nếu bạn muốn giới hạn quyền truy cập vào nội dung, bạn cần sử dụng một plugin thành viên khác.

Cách sử dụng

  • Đầu tiên, truy cập vào Appearance > Menus trong trang quản trị WordPress.
  • Thiết lập “Display Mode” thành “logged in users” (người dùng đã đăng nhập), “logged out users” (người dùng chưa đăng nhập) hoặc “everyone” (tất cả mọi người). Mặc định là “everyone”.
  • Nếu bạn muốn tùy chỉnh theo vai trò, hãy thiết lập “Display Mode” thành “Logged In Users” và dưới “Restrict menu item to a minimum role” kiểm tra các hộp bên cạnh vai trò mong muốn. Hãy nhớ rằng vai trò không giới hạn mục menu chỉ cho vai trò đó, mà là cho tất cả những người dùng có khả năng của vai trò đó. Ví dụ: một mục được đặt thành “Subscriber” sẽ được hiển thị bởi các Subscriber và quản trị viên. Hãy xem đây như là một vai trò tối thiểu cần thiết để xem một mục.

Hỗ trợ

Hỗ trợ cho plugin Nav Menu Roles được xử lý trong diễn đàn WordPress. Vui lòng lưu ý rằng hỗ trợ có giới hạn và không bao gồm việc triển khai tùy chỉnh của plugin. Trước khi đăng bài, hãy đọc FAQ. Ngoài ra, hãy xác minh vấn đề với các plugin khác đã bị vô hiệu hóa và khi sử dụng giao diện mặc định.

Vui lòng báo cáo bất kỳ lỗi, lỗi, cảnh báo, vấn đề mã nào cho Github.

Hình ảnh màn hình

  • Hiển thị các tùy chọn mới cho các mục menu trong trình tạo menu quản trị
  • Cài đặt

    • Tải thư mục “plugin” lên thư mục “/wp-content/plugins/”
    • Kích hoạt plugin thông qua menu ‘Plugins’ trong WordPress
    • Truy cập vào Appearance > Menus
    • Chỉnh sửa các mục menu tương ứng. Đầu tiên chọn liệu bạn muốn hiển thị mục cho tất cả mọi người, tất cả những người dùng chưa đăng nhập, hoặc tất cả người dùng đã đăng nhập.
    • Người dùng đã đăng nhập có thể bị giới hạn thêm theo vai trò cụ thể bằng cách kiểm tra các hộp bên cạnh các vai trò bạn muốn giới hạn hiển thị.

    Câu hỏi thường gặp

    Tôi không thấy các tùy chọn Nav Menu Roles trong các mục menu quản trị?

    Điều này có thể do xung đột với một plugin khác (hoặc chủ đề).

    Kể từ phiên bản WordPress 5.4, hook wp_nav_menu_item_custom_fields đã được thêm vào WordPress core. Nav Menu Roles đính kèm trực tiếp vào hook này mà không cần thay thế Admin Menu Walker tùy chỉnh, trong đó vẫn chỉ có một. Nếu Walker được thay thế bởi một chủ đề/plugin và hook core không được bao gồm, thì Nav Menu Roles không thể thêm trường của nó.

    Một số xung đột đã biết:

    • Plugin UberMenu 2.x Mega Menus (UberMenu 3.x hỗ trợ NMR!)
    • Plugin Add Descendants As Submenu Items
    • Plugin Navception
    • Chủ đề Suffusion
    • Chủ đề BeTheme
    • Plugin Yith Menu
    • Chủ đề Jupiter
    • Chủ đề iMedica
    • Chủ đề Prostyler EVO
    • Plugin Mega Main

    Phương án thay thế #1

    Shazdeh đã có ý tưởng thông minh là không chờ hook core mà tự thêm hook vào. Nếu tất cả các tác giả plugin và chủ đề sử dụng cùng một hook, chúng ta có thể làm cho plugin của chúng ta tương thích.

    Trước WordPress 5.4, tôi đã sử dụng ý tưởng này và sửa đổi Admin Nav Menu Walker của mình chỉ bằng cách thêm các dòng sau (ngay sau đầu vào mô tả):

    “`

    if ( ! function_exists( ‘wp_nav_menu_item_custom_fields’ ) ) {

    function wp_nav_menu_item_custom_fields( $id, $item, $depth, $args ) {

    // your custom fields here

    }

    }

    “`

    Tuy nhiên, kể từ WordPress 5.4, tôi không còn thay thế Walker hoàn toàn và tôi khuyến nghị các plugin và chủ đề khác cũng làm như vậy.

    Nhưng đối với những plugin vẫn cần thay thế Walker, chúng thực sự cần bao gồm hook core đã được thêm vào.

    Hãy yêu cầu tác giả của plugin/chủ đề xung đột thêm mã này vào plugin hoặc chủ đề của họ và plugin của chúng ta sẽ trở nên tương thích.

    Hướng dẫn sửa lỗi cho Plugin/Chủ đề của bạn

    Nếu bạn muốn tự sửa lỗi này, bạn có thể sửa đổi lớp Admin Nav Menu Walker của plugin/chủ đề xung đột.

    Lưu ý: Tôi không cung cấp hỗ trợ để sửa lỗi cho plugin/chủ đề của bạn. Nếu bạn không thoải mái với các hướng dẫn sau, hãy liên hệ với nhà phát triển của plugin/chủ đề xung đột!

    1. Tìm lớp mở rộng từ Walker_Nav_Menu. Cách nhanh nhất để làm điều này là tìm kiếm toàn bộ thư mục plugin/chủ đề của bạn cho extends Walker_Nav_Menu. Khi bạn tìm thấy tệp chứa văn bản này, bạn sẽ biết được tệp bạn cần chỉnh sửa. Khi bạn tìm thấy nó, đây là cách bắt đầu của lớp đó:

    “`

    class My_Custom_Walker_Nav_Menu extends Walker_Nav_Menu {

    // …

    }

    “`

    2. Tìm phương thức start_el()

    Trong tệp đó, bạn sẽ thấy một phương thức của lớp như sau:

    “`

    class My_Custom_Walker_Nav_Menu extends Walker_Nav_Menu {

    // …

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    // …

    }

    // …

    }

    “`

    3. Dán hook hành động vào đâu đó trong phương thức này!

    Trong Nav Menu Roles, tôi đã đặt hook ngay sau mô tả, như sau:

    “`

    class My_Custom_Walker_Nav_Menu extends Walker_Nav_Menu {

    // …

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    // …

    if ( isset( $description ) && ” !== $description ) {

    $output .= wp_kses_post( $args->before . $description . $args->after );

    // Add hook here

    do_action( ‘nav_menu_item_custom_fields’, $item_id, $item, $depth, $args );

    }

    // …

    }

    // …

    }

    “`

    Phương án thay thế #2

    Là một phương án thay thế, bạn có thể chuyển sang sử dụng một chủ đề mặc định (hoặc tắt plugin xung đột), chỉnh sửa Nav Menu Roles cho từng mục menu, sau đó quay lại chủ đề ban đầu/ bật lại plugin xung đột. Chức năng phía trước của Nav Menu Roles sẽ vẫn hoạt động.

    Phương án thay thế #3

    Chỉ hoạt động với phiên bản WordPress dưới 5.4.

    Tải xuống và cài đặt plugin nhỏ này. Kích hoạt nó khi bạn cần xuất hiện các tùy chọn NMR, sau đó tắt nó khi bạn đã hoàn thành chỉnh sửa.

    Tôi đang sử dụng plugin XYZ Membership và tôi không thấy “cấp độ” của nó?

    Có một số plugin thành viên không sử dụng vai trò/quyền truy cập WordPress truyền thống. Plugin của tôi sẽ liệt kê bất kỳ vai trò nào được đăng ký theo cách truyền thống của WordPress. Nếu plugin thành viên của bạn sử dụng một hệ thống khác, Nav Menu Roles sẽ không hoạt động ngay lập tức. Kể từ phiên bản 1.3.5, tôi đã thêm bộ lọc nav_menu_roles_item_visibility ngay trước khi code của tôi quyết định xem có hiển thị/ẩn một mục menu hay không. Luôn có bộ lọc nav_menu_roles cho phép bạn chỉnh sửa các vai trò được liệt kê trong trang quản trị. Với hai bộ lọc này, tôi tin rằng bạn có đủ để tích hợp Nav Menu Roles với bất kỳ plugin thành viên nào.

    Dưới đây là một ví dụ, tôi đã thêm một vai trò giả mới, được gọi là “new-role”. Hàm đầu tiên thêm nó vào màn hình admin của mục menu. Hàm thứ hai khá chung chung và sẽ không làm gì cả vì bạn cần cung cấp quy tắc của riêng mình dựa trên plugin bạn đang sử dụng. Nav Menu Roles sẽ lưu thông tin “vai trò” mới và thêm nó vào mục trong một mảng vào biến $item->roles.

    Các plugin tương thích hiện có

    • Wishlists Memberships
    • WooCommerce Memberships

    Nếu plugin thành viên của bạn không được liệt kê ở đây, bạn có thể sử dụng các plugin cầu nối trên làm mẫu. Cuộn xuống cuối tệp plugin chính và bạn sẽ thấy một phần cho “Các chức năng trợ giúp”. Nếu bạn sửa đổi 3 hàm bao gói theo logic của plugin thành viên của bạn, phần còn lại của plugin sẽ xử lý tích hợp với Nav Menu Roles.

    Thêm một “vai trò” mới

    Các vai trò trong NMR có thể được lọc riêng biệt từ $wp_roles toàn cục. Điều này cho phép tích hợp giữa các plugin không sử dụng vai trò trung tâm để xác định quyền truy cập, như một số plugin thành viên.

    Lưu ý, nếu bạn muốn thêm một khả năng WordPress, điều trên đây là tất cả những gì bạn cần. Bởi vì Nav Menu Roles kiểm tra xem vai trò có quyền xem mục menu bằng cách sử dụng current_user_can($role), bạn không cần viết một callback tùy chỉnh cho bộ lọc nav_menu_roles_item_visibility.

    Related Posts

    Leave a Reply

    Your email address will not be published. Required fields are marked *