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。从那里开始,这个脚本应该将那本新书添加到她的导航页面的顶部:-)
我正在使用 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。从那里开始,这个脚本应该将那本新书添加到她的导航页面的顶部:-)