【问题标题】:Wordpress - wp_insert_post() and nav_menu_itemsWordpress - wp_insert_post() 和 nav_menu_items
【发布时间】:2015-06-16 20:25:03
【问题描述】:

我正在使用wp_insert_post() 在 WordPress 中添加新页面。这会将帖子插入到wp_posts,从而使帖子显示在仪表板中。

从那里,我必须在“页面”选项卡下手动单击并拖动,以使该帖子成为导航栏中的菜单项,

如何从 PHP 端执行此操作?我已经扫描了 Codex,但找不到我要找的东西。这种东西似乎没有 WordPress 功能。

【问题讨论】:

    标签: php wordpress navigation


    【解决方案1】:

    问题解决了。

    虽然 WordPress 没有提供将项目和子项目添加到导航栏的特定功能,但有一种解决方法。该项目涉及作者能够将新书添加到她的数据库中,并让它们自动显示在导航栏中作为“书籍”下的子项,而无需通过仪表板进行操作。

    我去了主题目录中的header.php,找到了wp_nav_menu()函数。阅读this article后,我可以修改输出,使用str_replace添加一些我自己的<li>标签。

    这是默认的样子:

    wp_nav_menu( array( 'theme_location' => 'primary' ) );
    

    这是我的修改版本:

    // First open up a database connection
    $db = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
    

    我接下来所做的基本上是调用链接(在表中称为“guid”)并从 WordPress 数据库中的“wp_posts”表中发布标题。我还需要从我自己的“书”表中获取书名。书名与“wp_posts”中的“post_title”相同。

    // Here's the command I used to call them up
    $command = 'SELECT b.book_title AS book_title, wp.guid AS guid FROM books AS b
    LEFT OUTER JOIN wp_posts AS wp ON b.book_title = wp.post_title
    GROUP BY b.order;';
    
    $books_submenu = ''; // leave this empty for now
    
    // Fetch objects from tables
    $result = $db->query($command);
    while ($data = $result->fetch_object()) {
        $books_submenu = $books_submenu . '
        <li class="menu-item">
        <a href="' . $data->guid . '">' . $data->book_title . '</a>
        </li>'; // Each loop will add another <li> to the variable.
    

    现在让我难过的部分来了。您可以将参数添加到 wp_nav_menu 函数中,方法是将它们添加到里面的数组中。我需要的重要的是“theme_location”和“echo”。我把所有这些都放在一个变量中:

    $my_new_menu = wp_nav_menu( array( 'theme_location' => 'primary', 'echo' => false ) );
    

    将“echo”设置为 false 会使函数的 HTML 成为可编辑的 PHP 变量。现在我们可以更轻松地操作它了:

    $my_new_menu = str_replace(   '>Books</a></li>', // We're going to replace this...
                                  '>Books</a><ul class="sub-menu">' . $books_submenu . '</ul></li>', // ...with this.
                                  $my_new_menu
                             );
    

    最后:

    echo $my_new_menu; // Result should be a custom dropdown
    

    我的工作到此结束。每次她添加新书时,我的插件都会使用wp_post_insert() 将页面添加到“wp_posts”,并将该书添加到我的“books”表中。从那里,这个脚本应该将那本新书添加到她的导航页面的顶部:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2022-06-10
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多