我正试图从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);