将特色图像添加到 wp_nav_menu 项目

Posted

技术标签:

【中文标题】将特色图像添加到 wp_nav_menu 项目【英文标题】:Add featured image to wp_nav_menu items 【发布时间】:2014-11-22 14:57:57 【问题描述】:

这是一个自我问答。

如何修改出现在 wp_nav_menu 输出中的文本/html?例如,我想为页面和类别添加特色图片。

您会看到使用自定义 walker 执行此操作的示例,但是对于小的更改,代码非常复杂。肯定有办法用过滤器做到这一点?

【问题讨论】:

【参考方案1】:

感谢 Wordpress *** 答案的一些帮助,我找到了这个代码,但我再也找不到了(如果你找到了,请用链接评论)。

首先,您需要将过滤器添加到特定菜单(如果需要,您可以将其添加到所有菜单 - 只需单独使用 add_filter 行)。

// Add filter to specific menus 
add_filter('wp_nav_menu_args', 'add_filter_to_menus');
function add_filter_to_menus($args) 

    // You can test agasint things like $args['menu'], $args['menu_id'] or $args['theme_location']
    if( $args['theme_location'] == 'header_menu') 
        add_filter( 'wp_setup_nav_menu_item', 'filter_menu_items' );
    

    return $args;

然后您需要构建代码以从传递给过滤器的 $item 对象中获取帖子或类别 ID。这并不像您期望的那么容易,因为 $item 不包含底层的帖子/类别 ID,而只是菜单项 ID。所以我使用 URL 对 ID 进行反向查找。

这不适用于菜单中使用的标签或自定义分类。我只需要它用于类别,所以这就是我构建的全部。

// Filter menu
function filter_menu_items($item) 

    if( $item->type == 'taxonomy') 

        // For category menu items
        $cat_base = get_option('category_base');
        if( empty($cat_base) ) 
            $cat_base = 'category';
        

        // Get the path to the category (excluding the home and category base parts of the URL)
        $cat_path = str_replace(home_url().'/'.$cat_base, '', $item->url);

        // Get category and image ID
        $cat = get_category_by_path($cat_path, true);
        $thumb_id = get_term_meta($cat->term_id, '_term_image_id', true); // I'm using the 'Simple Term Meta' plugin to store an attachment ID as the featured image

     else 
        // Get post and image ID
        $post_id = url_to_postid( $item->url );
        $thumb_id = get_post_thumbnail_id( $post_id );
    

    if( !empty($thumb_id) ) 
        // Make the title just be the featured image.
        $item->title = wp_get_attachment_image( $thumb_id, 'poster');
    

    return $item;

然后您想删除您在开始时应用的过滤器,以便下一个处理的菜单不使用与上面在 filter_menu_items() 中定义的相同的 HTML。

// Remove filters
add_filter('wp_nav_menu_items','remove_filter_from_menus', 10, 2);
function remove_filter_from_menus( $nav, $args ) 
    remove_filter( 'wp_setup_nav_menu_item', 'filter_menu_items' );
    return $nav;

【讨论】:

以上是关于将特色图像添加到 wp_nav_menu 项目的主要内容,如果未能解决你的问题,请参考以下文章

将 div 插入 wp_nav_menu

markdown 将特色图像添加到RSS源。

PHP 将特色图像支持添加到WordPress主题

如何将类添加到 wp_nav_menu 中的某些 li 元素

php 将特色图像添加到Wordpress RSS feed

PHP 将特色图像缩略图添加到WordPress管理列