问题解决了。
虽然 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”表中。从那里,这个脚本应该将那本新书添加到她的导航页面的顶部:-)