php - PHP 输出菜单项链接:要转换为 json 的数组
问题描述
我正在尝试从 wp_head 中的自定义导航中输出所有链接的列表。我的代码有点工作,但由于某种原因,输出的链接看起来很有趣。
我期待得到https://example.com/sample-page/
我得到: \ / \ / 作为链接而不是 ://
我错过了一些明显的东西吗?
我的代码:
//OUTPUT MENU
function get_nav_items() {
$menu_slug_to_retrieve = 'my-custom-menu';
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menu_slug_to_retrieve ] );
$menu_items = wp_get_nav_menu_items( $menu->term_id );
$menu_items_json = array(); // Prepare the array to convert to json
// Loop it
if ( $menu_items ) {
foreach ( $menu_items as $item ) {
$menu_items_json[] = array( 'url' => $item->url );
}
$html = sprintf(
'<script type="application/ld+json" id="custom-json">%s</script>',
json_encode( $menu_items_json )
);
echo $html;
}
}
add_action( 'wp_head', 'get_nav_items' );
解决方案
这是非常预期的输出。什么json_encode
是,它通过前置反斜杠来逃避所有正斜杠。如果您将其包含在script
元素中,这会很方便。如果你不想要转义的正斜杠,你可以通过添加这个标志告诉 php:
json_encode($str, JSON_UNESCAPED_SLASHES);
推荐阅读
- python - 如何使用 Selenium 从网站上的日期选择器中处理和选择元素?
- javascript - 如何访问shadowroot中的值
- elasticsearch - 如何判断是什么原因导致 ES 的查询 API 不稳定
- c# - 使用 PerfView 发现 .NET Core 中的内存泄漏
- spring-boot - 在 RabbitMQ 的直接交换中,它是否将消息传递给连接到该特定队列的所有消费者?
- docker - 附加到 docker 容器运行进程后如何打印 cmd 行参数?
- reactjs - 需要 React 组件结构帮助
- javascript - 如何过滤子对象的属性并返回带有通过 Javascript 过滤器的子对象的父对象?
- r - 在R中导入数据时如何更改对象
- syslog - 为什么 rsyslog isequal 过滤器失败?