WordPress - wp_insert_post() 和 nav_menu_items

Wordpress - wp_insert_post() and nav_menu_items

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

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

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

问题已解决。

虽然 WordPress 没有提供用于向导航栏添加项目和 sub-items 的特定功能,但有一个解决方法。该项目涉及一位作者能够将新书添加到她的数据库中,并让它们在导航栏中自动显示为 "Books" 下的 sub-item,而无需通过仪表板来执行此操作。

我去主题目录中的 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)

接下来我基本上是调出链接(在 table 中称为 "guid")和 "wp_posts" table 中的 post 标题WordPress 数据库。我还需要从我自己的 "books" table 中获取书名。书名与"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 成为 editable 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" table。从那里开始,这个脚本应该将那本新书添加到她的导航页面的顶部:-)