WordPress/PHP 获取主导航中所有链接的列表

WordPress/PHP get list of all links in primary navigation

我正在尝试在我的 WordPress 网站的主导航中创建所有 link 的列表。我正在尝试将 link 输出为 URL: 在使用 foreach 循环的脚本标记中。

我一直在尝试在我的 foreach 循环中使用 $navItem->url 列出导航项 link。它没有 return 任何东西/错误。

代替 $locations[$menuLocations] 我试过只写主菜单名称:$locations['primary'] 但到目前为止运气不好。

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

    // Get all locations
    $menuLocations = get_nav_menu_locations();
 
    // Get object id by location
    $object = wp_get_nav_menu_object( $locations[$menuLocations] );
 
    // Get menu items by menu name
    $menu_items = wp_get_nav_menu_items($object);
    
foreach ( $menu_items as $navItem ) {
    
    $html .= '"url":"' . $navItem->url . '"';
}
    $html .= "</script>";

    echo $html;
}
add_action('wp_head', 'get_nav_menu_items_by_location');

好吧...我对您的代码进行了重构并且它有效 ;)

试试这个方法:

function get_nav_items() {

   $menu_slug_to_retrieve = 'main'; // This can be main, primary, what ever...
   $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' );

此致!