WordPress tạo menu tùy chỉnh theo chương trình

Giả sử bạn có một chủ đề tùy chỉnh (hoặc một chủ đề con đã sửa đổi) và bạn đã đăng ký các menu điều hướng. Bây giờ bạn cũng muốn tự động thêm các mục menu thực tế vào các menu điều hướng đó. Có thể bạn đã cài đặt nhiều trang và mỗi khi ai đó tạo một trang mới, bạn muốn tất cả điều hướng của họ được thiết lập cho họ

Điều này hoàn toàn có thể xảy ra và tôi đã dành cả buổi sáng để tìm ra tất cả những điểm phức tạp, tất nhiên là nhờ có sự hỗ trợ tuyệt vời từ WordPress Codex và Stack Exchange

Đầu tiên, bạn đăng ký các menu điều hướng trong chức năng của mình. tập tin php, một cái gì đó như thế này

// Create Nav Menus
register_nav_menus( array(
'primary' => 'Primary',
) );

Tôi chỉ đăng ký một ở đây, nhưng bạn có thể đăng ký nhiều như vậy

// Create Nav Menus
register_nav_menus( array(
'primary' => 'Primary',
'secondary' => 'Secondary',
'mobile' => 'Mobile'
) );

Tiếp theo, chúng tôi muốn tạo tất cả các mục điều hướng cho menu Chính. Trong ví dụ bên dưới, chúng tôi sẽ tạo cả liên kết menu tùy chỉnh, cũng như tự động thêm một số danh mục và biến chúng thành mục điều hướng phụ của mục “Chủ đề” tùy chỉnh

// setup navigation automatically
add_action('load-nav-menus.php', 'auto_nav_creation_primary');
function auto_nav_creation_primary(){
$name = 'Navigation';
$menu_exists = wp_get_nav_menu_object($name);
if( !$menu_exists){
$menu_id = wp_create_nav_menu($name);
$menu = get_term_by( 'name', $name, 'nav_menu' );

wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => __('Topics'),
'menu-item-classes' => 'topics-dropdown',
'menu-item-url' => '#',
'menu-item-type' => 'custom',
'menu-item-status' => 'publish'));

$cat_args=array(
'exclude' => '1,10',
'hide_empty' => 0
);
$the_cats = get_categories($cat_args);
if (count($the_cats) > 0){
foreach($the_cats as $category){
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => $category->name,
'menu-item-object-id' => $category->term_id,
'menu-item-db-id' => 0,
'menu-item-object' => 'category',
'menu-item-parent-id' => 5,
'menu-item-depth' => 1,
'menu-item-type' => 'taxonomy',
'menu-item-url' => get_category_link($category->term_id),
'menu-item-status' => 'publish',)
);
}
}
$event_cat_args=array(
'include' => '10',
'hide_empty' => 0
);
$eventCat = get_categories($event_cat_args);
if (count($eventCat) > 0){
foreach($eventCat as $eventCat){
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => $eventCat->name,
'menu-item-object-id' => $eventCat->term_id,
'menu-item-db-id' => 0,
'menu-item-object' => 'category',
'menu-item-type' => 'taxonomy',
'menu-item-url' => get_category_link($eventCat->term_id),
'menu-item-status' => 'publish',)
);
}
}
}
//then you set the wanted theme location
$locations = get_theme_mod('nav_menu_locations');
$locations['primary'] = $menu->term_id;
set_theme_mod( 'nav_menu_locations', $locations );
}

Ở đó bạn có nó. Mã này thực hiện chính xác những gì tôi đã chỉ định trong đoạn trước và tất cả đều xảy ra bất cứ khi nào bạn truy cập trang Giao diện > Menu

Nhưng hãy giải thích những gì đang xảy ra ở đây chi tiết hơn một chút

Chúng tôi đang thiết lập tất cả những thứ này dưới dạng một chức năng và chức năng đó là auto_nav_creation_primary. Trong dòng bên dưới, chúng tôi thêm chức năng đó vào móc load-nav-menus.php, chức năng này kích hoạt khi màn hình Giao diện > Menu được tải. Bạn có thể thay đổi phần này thành thứ khác, nhưng lưu ý rằng bạn cần phải tạo một số danh mục để phần đó hoạt động

Trong ứng dụng của mình, tôi cũng tạo các danh mục theo chương trình trước khi tạo các menu điều hướng này. Tôi sẽ đăng vào ngày khác

add_action('load-nav-menus.php', 'auto_nav_creation_primary');


$name = 'Navigation';
$menu_exists = wp_get_nav_menu_object($name);
if( !$menu_exists){
$menu_id = wp_create_nav_menu($name);
$menu = get_term_by( 'name', $name, 'nav_menu' );

Ở đây, chúng tôi xác định tên của menu, sau đó sử dụng $menu_exists = wp_get_nav_menu_object($name); và dòng sau, chúng tôi kiểm tra xem menu đã tồn tại chưa. Không có lý do gì để tạo hoặc ghi đè lên nó nếu có (nếu không, mỗi khi bạn truy cập màn hình này, bạn sẽ viết lại menu của mình, vì vậy không thể thực hiện thay đổi thủ công nào)

Tiếp theo, chúng ta sẽ tạo mục menu tùy chỉnh, cấp cao nhất “Chủ đề” mà Id đã đề cập. Mã này có thể được chỉnh sửa để tạo bất kỳ mục điều hướng nào, liên kết với bất kỳ URL nào và thậm chí cung cấp cho nó một lớp CSS tùy chỉnh

________số 8

Tiếp theo, chúng tôi sẽ tải các danh mục của mình lên và thêm chúng dưới dạng các mục điều hướng phụ vào mục 'Chủ đề' này. Trong trường hợp này, tôi không muốn danh mục Chưa được phân loại và tôi cũng đã loại trừ danh mục có ID là 10 để chúng tôi có thể hiển thị danh mục đó bên ngoài trình đơn thả xuống này (thêm về điều đó bên dưới)

$cat_args=array(
'exclude' => '1,10', // exclude 1 (the Uncategorized category) and 10, another category we don't want in this sub-menu
'hide_empty' => 0 // I use this to force WordPress to return even empty categories, which get_categories doesn't do by default
);
$the_cats = get_categories($cat_args); // get the list of categories from our arguments above
if (count($the_cats) > 0){ // if the list isn't empty, let's do this!
foreach($the_cats as $category){
wp_update_nav_menu_item($menu->term_id, 0, array(
'menu-item-title' => $category->name, // the visible name of the item will be the category's name
'menu-item-object-id' => $category->term_id,
'menu-item-db-id' => 0, // 0 equates to setting a new ID for this item
'menu-item-object' => 'category',
'menu-item-parent-id' => 5, // here I know that 5 is the 'Topics' menu item ID, replace as needed. This makes each category a child of the Topics item
'menu-item-depth' => 1, // this sets the depth to 1, though it may not be necessary
'menu-item-type' => 'taxonomy', // this defines the type of menu item, where we used Custom before, we're now defining it as a taxonomy
'menu-item-url' => get_category_link($category->term_id), // sets the URL for the menu item
'menu-item-status' => 'publish',)
);
}
}

Bạn có thể làm điều gì đó tương tự như chỉ truy xuất một danh mục. Trong trường hợp này, tôi muốn một danh mục cụ thể tồn tại dưới dạng mục điều hướng cấp cao nhất

// Create Nav Menus
register_nav_menus( array(
'primary' => 'Primary',
'secondary' => 'Secondary',
'mobile' => 'Mobile'
) );
0

Tất cả những gì còn lại sau đó là gán tất cả những thứ này cho một menu điều hướng cụ thể (bạn có nhớ khi chúng tôi đăng ký chúng ở đầu bài đăng này không?)

// Create Nav Menus
register_nav_menus( array(
'primary' => 'Primary',
'secondary' => 'Secondary',
'mobile' => 'Mobile'
) );
1

của bạn đi. Không cần thiết lập các mục điều hướng theo cách thủ công nữa, hãy để WP làm điều đó cho bạn

Tiếp theo. Thêm vào giỏ hàng trên lựa chọn biến thể, thương mại điện tử

Chúng ta có gì ở đây…

WordPress tạo menu tùy chỉnh theo chương trình
WordPress tạo menu tùy chỉnh theo chương trình

Đoạn mã miễn phí liên quan đến WordPress

Tôi cũng đề cập đến rất nhiều nội dung về Wooc Commerce và Gravity Forms

Tôi sử dụng dịch vụ lưu trữ Siteground WordPress và không thể giới thiệu đủ cho họ. Tôi đã sử dụng những người đắt tiền, "WP được quản lý" và Siteground chỉ đơn giản là cung cấp mọi thứ họ làm, với mức giá hợp lý hơn đáng kể

Khi tôi không làm công việc thiết kế web này, tôi sống trong một chiếc xe van với gia đình, đi du lịch toàn thời gian và viết cho Wand’rly và Campendium

Thảo luận

  1. Levi Johansen

    Khá hữu ích +1

  2. Ishwar Lal Ghiya

    Mã rất hữu ích. tiết kiệm rất nhiều thời gian của tôi. cảm ơn nhiều

  3. tom

    Công việc tuyệt vời, cảm ơn. tôi có thể, một câu hỏi. làm thế nào để. chỉ thay đổi tiêu đề

    1. na-than

      Tôi nghĩ cách dễ nhất để làm điều đó là chỉ cần vào phần Giao diện> Menu, nhấp vào mũi tên xuống trên mục bạn muốn thay đổi, sau đó chỉnh sửa tiêu đề

      Theo mặc định, nếu bạn chọn Loại trang (ví dụ) và thêm trang “Giới thiệu”, sau đó thay đổi tiêu đề thành “Giới thiệu về tôi”, mục điều hướng sẽ tự động cập nhật. Chỉnh sửa nó một lần (trong Giao diện> Menu) sẽ ngăn điều này xảy ra lần nữa

  4. NGƯỜI DÙNG

    Một câu hỏi.
    Nếu chúng ta muốn hiển thị tất cả các trang wp trong menu chính bằng cái này thì sao?
    Tôi đang cố gắng làm nhưng chưa được 🙁

    Cảm ơn trước

    1. na-than

      Bạn chắc chắn có thể làm điều này, bạn cần sửa đổi mã để bao gồm tất cả các trang. Theo mặc định, nếu bạn không tạo menu mặc dù WP sẽ tự động thêm tất cả các trang vào menu cụ thể đó, tôi tin

  5. shabti

    Ồ. Đây là một kỹ thuật thực sự tiện dụng. Tôi có một khách hàng hoàn toàn không thích làm bất kỳ công việc kỹ thuật nào nên sẽ thật tuyệt khi menu sẽ chỉ được thiết lập cho những người tương tự quan tâm đến chủ đề của tôi

  6. Php trên web

    Xin chào anh bạn, tôi cũng đã tìm hiểu được một ví dụ hay
    Tạo Menu Điều hướng Trong Chủ đề WordPress

  7. Carsten Lentfer

    Chào Nathan

    Cảm ơn vì đoạn mã tuyệt vời này. Về cơ bản chính xác những gì tôi đang tìm kiếm

    Hiện tại, tôi đang làm việc trên trang web Lịch sự kiện ẩm thực và tôi muốn đưa vào điều hướng của mình các nguyên tắc phân loại tùy chỉnh cho các địa điểm sự kiện

    Làm cách nào để tôi cần sửa đổi tập lệnh của bạn để điền điều hướng của tôi với tất cả các mục từ phân loại điện tử. g. “địa điểm”?

    Cảm ơn trước và lời chào trân trọng nhất từ ​​Đức
    Carsten

    1. na-than

      Xin chào Carsten, tôi rất muốn giúp đỡ nhưng đã có lịch hẹn ít nhất trong vài tháng

  8. song thân

    xin chào, cảm ơn bạn đã chia sẻ mã này
    tôi đã cố gắng sử dụng nó nhưng tôi nhận thấy rằng nó không cập nhật danh mục khi chúng tôi thêm danh mục mới vào danh sách danh mục của mình. tôi không biết liệu có phải tôi đã làm sai điều gì đó hay có điều gì đó sai trong mã của bạn.

    1. na-than

      Các danh mục đã tồn tại chưa?

  9. Kevin

    Có bất kỳ hook nào cho phép menu đó được kích hoạt khi tạo trang con trong một kịch bản nhiều trang không. Người dùng sẽ không có quyền truy cập vào quản trị viên và menu không được biên dịch cho đến khi bạn truy cập menu trong quản trị viên

    1. na-than

      Có thể, Kevin, mặc dù tôi chưa phải làm điều đó nên không biết chắc chắn vào thời điểm này

  10. Alex

    Này, cảm ơn vì đã đăng bài này

    Mặc dù tôi bối rối — khi nào thì `$menu_id` được sử dụng?

  11. Stan Hooker

    Cảm ơn vì đã đăng bài này. Tôi không thể làm việc này trong 5. 2. 2. Bất cứ ý tưởng tại sao?

    Cảm ơn

    1. na-than

      Xin lỗi, đã lâu không kiểm tra nhưng bạn đang gặp sự cố gì?

  12. so sánh

    Tôi không thể tìm cách tự động tạo hàng trăm danh mục cho menu thương mại điện tử

    1. na-than

      Đây là về việc tạo các mục điều hướng, không phải danh mục. Hãy xem wp_insert_category() để biết những gì bạn đang theo đuổi

Để lại bình luận

Địa chỉ email của bạn sẽ không được công bố

Bình luận

Tên *

Email *

Trang mạng

Δ

Thêm vào giỏ hàng trên lựa chọn biến thể, thương mại điện tử

Cách đặt hình ảnh đầu tiên trong bài đăng WordPress thành hình ảnh nổi bật (Ngay cả đối với bài viết cũ / Không cần lập trình)