将特色图像添加到 wp_nav_menu 项目

2024-01-11

这是一个自我问答。

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

您可以看到使用自定义步行器执行此操作的示例,但对于小的更改来说,代码非常复杂。当然有办法用过滤器来做到这一点吗?


这是我在 Wordpress StackOverflow 答案的帮助下想出的代码,但我找不到了(如果找到,请用链接评论)。

首先,您需要将过滤器添加到特定菜单(如果需要,您可以将其添加到所有菜单 - 只需单独使用 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将特色图像添加到 wp_nav_menu 项目 的相关文章

随机推荐

  • PreferenceFragmentCompat 在 PreferenceCategory 上有填充,我无法摆脱

    所以我一直在尝试使用 androidx preference PreferenceFragmentCompat 创建一个设置活动 并且一切正常 然而 由于某种原因 偏好类别和偏好本身都存在一些填充 我设法通过使用 app iconSpace
  • Zend Framework 2 包括自定义库

    我的目录结构是这样的 c 工作区 Zend c 工作区 自定义库 自定义库是一个共享库 可以在其他应用程序中使用 它不使用命名空间 仅使用旧式下划线 我下载了 ZF2 Restful Module Skeleton 打算将其用作静态服务器
  • 如何模拟类的内部方法?

    我有一个有内部方法的类 我想模拟内部方法 但我无法模拟它 即它不是调用模拟函数而是调用原始函数 有什么办法可以实现这一点吗 编辑 实际上我是最小起订量的新手 我有很多类和类的方法来使用最小起订量进行测试 许多类是内部的 许多有内部方法 许多
  • 为什么我的 GitHub 页面不更新其内容?

    我一直在关注官方指南 pages github com https pages github com 到目前为止 我已经创建了本地存储库并将其推送到 GitHub 但是 无论我做什么更改 我都可以在 GitHub 的存储库中看到它 但是no
  • IE 中的多行按钮

    我目前处于一种可怕的情况 需要我在两行上设置 按钮 类型的输入样式 按钮上的固定宽度会导致按钮内的文本在除 IE 之外的所有其他浏览器中换行 因此 我的问题是 如何指定 value Button to Wrap 的输入在 IE 中换行到两行
  • 如何判断在 Dock 上放置过程中是否按下了修饰键

    我的 Cocoa 应用程序支持将文件拖放到其 Dock 图标上 但我希望根据是否按住修饰键 Command Option 等 来实现不同的行为 我尝试检查modifierFlags为了currentEvent 但无论是否按住修饰符 它们都是
  • 当我获取脚本时终端关闭(在开始时使用点运行)

    这是我的代码 bin bash if 1 then exit 0 fi array cat 1 let b array 1 count 0 for i in 1 7 do for j in 30 37 do for n in 40 47 d
  • 三元运算符的右结合性

    std cout lt lt true high pass false fail pass 是相同的 std cout lt lt true high pass false fail pass 既然三元运算符是右结合的 为什么我们不先进行右
  • 为什么java的inputstream.close()会阻塞?

    我的 Java 程序使用 ProcessBuilder redirectErrorStream 设置为 true 并有一个循环运行进程的输入流的 read 方法 该方法是阻塞的 然后我调用的外部程序停止等待输入和标准输入 我现在想终止该进程
  • 在 Spring MVC 中使用 Jackson JSON 时如何默认启用 Pascal 大小写?

    我有一个使用 Spring MVC 创建和处理多个 REST 端点的项目 我目前正在使用 Jackson 自动处理 JSON 的序列化 反序列化 RequestBody and ResponseBody注释 我已经让杰克逊开始工作了 所以我
  • 将 cqlsh 与 ssl 结合使用

    我已经在我的 cassandra 节点中启用了 ssl 加密 并且我正在尝试弄清楚如何使用带有 ssl 的 cqlsh 连接到我的节点 当我跑步时 cqlsh ssl我收到以下错误 Validation is enabled SSL tra
  • 我们可以用 ES6 Generator 做哪些 for 循环做不到的事情?

    我深入了解了 ES6 功能 Generators 引起了我的注意 我突然想到的一件事是链接 Promise 对象 而我无法使用循环来做到这一点 我们还能做哪些以前做不到的其他机制 我确实明白这是一个广泛的问题 但目前我除了承诺之外什么也想不
  • G1垃圾收集器:为什么幸存者空间总是满的?

    这是输出jmap heap命令 Survivor Space regions 52 capacity 54525952 52 0MB used 54525952 52 0MB free 0 0 0MB 100 0 used 我已经执行了很多
  • 使用UniversalImageDownloader的ListView滚动不平滑

    我正在使用包含图像的 ListView 这些图像是从互联网加载到适配器内的 因此我正在使用通用图像下载器 不幸的是 当我向下滚动需要下载新内容的位置时 ListView 的滚动会短暂 滞后 我实际上期望像 ListView 这样的行为滚动完
  • GitHub 组织未出现在“持续部署”页面中

    我的个人 GitHub 帐户属于五个组织 从 GitHub 设置 Azure 持续集成时 五个组织中只有四个出现在列表中 我们尝试过登录和注销 GitHub 和 Azure 此外 我们尝试更改 Azure 中的帐户 然后重新添加相同的帐户
  • 按新指南随机排序

    为了从 Sql 查询中以随机顺序获取结果 我通常按新的 Guid 进行排序 我之前已经使用实体框架完成了此操作 但由于某种原因它现在不起作用 例如 使用 Adventureworks2008r2 数据库 我在 LinqPad 中运行以下查询
  • 如何使用 Javascript 将 cookie 存储在本地存储中?

    我有一个适用于 Android 希望以后还有 iPhone 的应用程序 它基于 Javascript 并使用 Phonegap Applaud 制作成应用程序 不幸的是 设置和获取 cookie 在 Android 上不起作用 这可能是 A
  • 内容仅在我单击时出现在页面上

    我已经通过 Angular 2 应用程序连接到 Firebase 3 没有什么特别的 只是一个包含一小部分数据的简单表 在我的 Angular 2 应用程序中 我在服务中创建了服务 我创建了一个侦听器事件 如下所示 getAddedBugs
  • 创建 JavaScript 自定义事件

    我想用 JavaScript 创建一个自定义事件 我有一个 WPF 应用程序 里面有一个 WebBrowser 还有一个带有 JavaScript 的 HTML 页面 我使用打印机工作 当打印机的状态发生变化时 它会触发 NET 中的事件
  • 将特色图像添加到 wp_nav_menu 项目

    这是一个自我问答 如何修改 wp nav menu 输出中出现的文本 html 例如 我想为页面和类别添加特色图像 您可以看到使用自定义步行器执行此操作的示例 但对于小的更改来说 代码非常复杂 当然有办法用过滤器来做到这一点吗 这是我在 W