WordPress/PHP获得所有导航链接



我正在制作一个小插件,我想知道如何才能在主要导航中获得所有链接?想知道在不知道特定主题菜单的名称或标签的情况下是否可能。

下面我试图得到所有的菜单链接,并返回他们在一个脚本标签,但它没有工作得太好。它最终返回了一堆元数据,并在一个网站上完全破坏了该网站。

目前,脚本标记仅用于测试目的,稍后我将在无序列表中使用导航链接。

function get_nav_menu_items_by_location( $location, $args = [] ) {
?>
<script type = "application/ld+json" alt="hejtest" >
<?
// Get all locations
$locations = get_nav_menu_locations();

// Get object id by location
$object = wp_get_nav_menu_object( $locations[$location] );

// Get menu items by menu name
$menu_items = wp_get_nav_menu_items( $object->name, $args );

// Return menu post objects
return $menu_items;
?>
</script>
<?
}
add_action('wp_head', 'get_nav_menu_items_by_location');
```

不能"return"数据从PHP到JS。return关键字告诉PHP您已经完成了get_nav_menu_items_by_location函数,并将该值赋给调用的PHP代码。

要运行JavaScript,您需要输出一些代码,然后浏览器在接收到HTML时会执行

如果你想以一种容易被JS读取的方式输出一些数据,你可以滥用JSON格式是有效的JS代码的事实,并写echo json_encode($menu_items);。您还需要输出代码将其分配给变量,或将其传递给函数。

如果您正在编写的函数期望返回一些HTML,则您不想使用echo,也不想使用?>。相反,您希望构建一个包含HTML的PHP字符串并返回该字符串。

所以你可能会这样结束:

function get_nav_menu_items_by_location( $location, $args = [] ) {
$html = '<script type="application/ld+json" alt="hejtest">';
// Get all locations
$locations = get_nav_menu_locations();

// Get object id by location
$object = wp_get_nav_menu_object( $locations[$location] );

// Get menu items by menu name
$menu_items = wp_get_nav_menu_items( $object->name, $args );

$html .= "var my_menu_items = " . json_encode($menu_items) . ";";
$html .= "</script>";
return $html;
}
add_action('wp_head', 'get_nav_menu_items_by_location');

最新更新