【问题标题】:WordPress/PHP get all navigation linksWordPress/PHP 获取所有导航链接
【发布时间】:2021-05-07 02:36:54
【问题描述】:

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

下面我试图获取所有菜单链接并在脚本标签中返回它们,但效果不太好。它最终返回了一堆元数据,并在一个站点上完全破坏了该站点。

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

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');
    ```

【问题讨论】:

    标签: php wordpress object navigation return


    【解决方案1】:

    您不能将数据从 PHP 中“返回”到 JS。 return 关键字告诉 PHP 您已经完成了 get_nav_menu_items_by_location 函数,并将该值赋予 调用 PHP 代码

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

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

    如果您编写的函数预计返回一些 HTML,那么您不想使用echo,也不想使用?&gt;。相反,您想构建一个包含 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');
    

    【讨论】:

    • 非常感谢@IMSoP!这很有意义。我唯一的问题是 my_menu_items 由于某种原因一直返回 false。在您的回答的帮助下,我对我的代码进行了一些编辑,并用我提出的当前代码更新了问题。
    • @TurboTobias 我已回滚您的编辑。如果您在同一代码中遇到不同的问题,或者您的代码有新版本,请提出新问题。这不是一个论坛,如果您“移动球门柱”这样人们就必须不断编辑他们的答案以匹配,那么它就不会很好地工作。
    • 哦...好的。感谢您指出。我将创建一个新问题:)
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多