要在 WordPress 的選單修改結構,可以透過打開 functions.php 並加入 wp_nav_menu_objects。

像這樣就能調整每個 menu item 的 html:

function custom_menu_icons($items, $args) {
    foreach ($items as &$item) {
        // 對每個選單進行修改
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'custom_menu_icons');

 

比如我這樣就能夠把每個 menu 前面加上一個 <span class="menu-item-icon"></span>

function custom_menu_icons($items, $args) {
    foreach ($items as &$item) {
        // 在菜单项标题前添加 <span> 元素
        $item->title = '<span class="menu-item-icon"></span>' . $item->title;
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'custom_menu_icons', 10, 2);

 

如果我想判斷近期有新文章,我先設定是七天內,可以再加上這個 function:

function has_new_posts_in_category($category_id) {
    $args = array(
        'cat' => $category_id,
        'date_query' => array(
            array(
                'after' => '7 days ago',
            ),
        ),
        'posts_per_page' => 1,
        'orderby' => 'date',
        'order' => 'DESC',
    );
    $query = new WP_Query($args);
    return $query->have_posts();
}

再把這段跟 wp_nav_menu_objects 結合,會變成這樣:

function custom_menu_icons($items) {
    foreach ($items as &$item) {
		if(has_new_posts_in_category($item->object_id)){
        	$item->title = '<span class="menu-item-icon"><img src="icon.png"></span>' . $item->title;
		}
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'custom_menu_icons');

這樣就能判斷如果該分類七天內有新文章,就會顯示圖示提醒了。