Đây là phiên bản được tối ưu hóa/mở rộng của các giải pháp được đề xuất trước đây của tôi, được hoàn toàn tự động hoàn toàn. Không cần thêm thuộc tính CSS hoặc menu bổ sung.
Phiên bản này tự động nhận danh sách các loại bài tùy chỉnh và nếu loại bài đăng hiện tại là loại bài đăng tùy chỉnh, thì nó sẽ xóa lớp 'current_page_parent' khỏi tất cả các mục menu.
Ngoài ra, nó sẽ kiểm tra từng mục menu để xem trang đó có chứa mẫu trang như "page- {custom_post_type_slug} .php" không và nếu có, nó sẽ thêm lớp 'current_page_parent'.
Ưu tiên bộ lọc là 1, như một số chủ đề, thay thế current_page_parent/etc. các lớp với một lớp như 'hoạt động' (ví dụ: 'rễ' thực hiện điều này), do đó, bộ lọc này cần thực thi trước tiên.
Cuối cùng, nó sử dụng 3 biến tĩnh vì hàm này được gọi liên tục và những (rõ ràng) vẫn giữ nguyên như nhau thông qua tất cả các cuộc gọi.
function theme_current_type_nav_class($css_class, $item) {
static $custom_post_types, $post_type, $filter_func;
if (empty($custom_post_types))
$custom_post_types = get_post_types(array('_builtin' => false));
if (empty($post_type))
$post_type = get_post_type();
if ('page' == $item->object && in_array($post_type, $custom_post_types)) {
if (empty($filter_func))
$filter_func = create_function('$el', 'return ($el != "current_page_parent");');
$css_class = array_filter($css_class, $filter_func);
$template = get_page_template_slug($item->object_id);
if (!empty($template) && preg_match("/^page(-[^-]+)*-$post_type/", $template) === 1)
array_push($css_class, 'current_page_parent');
}
return $css_class;
}
add_filter('nav_menu_css_class', 'theme_current_type_nav_class', 1, 2);
PS. Chỉ để chỉ ra một thiếu sót trong tất cả các giải pháp không phải CSS mà tôi đã thấy cho đến nay, bao gồm cả của riêng tôi: Điều gì đó không được tính đến là làm nổi bật mục menu cha/tổ tiên của một mục liên kết đến một trang hiển thị các bài đăng hiện tại tùy chỉnh loại bài. Xem xét loại bài đăng "sản phẩm" tùy chỉnh và một menu như:
Home Company News Contact
|
\--About Us
\--Products
"Sản phẩm" là trang có mẫu "product-product.php" và hiển thị tổng quan về bài đăng của loại 'product'. Nó được đánh dấu do giải pháp được đăng. Tuy nhiên 'Công ty' làm cha mẹ/tổ tiên của nó cũng nên được tô sáng, nhưng không phải. Một cái gì đó để giữ trong tâm trí.
+1 Tuyệt vời tìm thấy, vui mừng khi biết nó đang ở trong trac – TheDeadMedic
Tôi đã thực hiện nó với CSS và các lớp cơ thể cho bây giờ. Cảm ơn các chức năng mặc dù. – Craig
+1 đoạn trích tuyệt vời ở đây, đã lưu cho tôi một tấn :) – Xavier