菜单元素后未附加模板部分
Template part not appended after menu element
我正在使用 wordpress walker class 在菜单 li
之后附加模板部分,但是它会将模板部分注入整个菜单结构之上。这是我得到的
class bt_menu_walker extends Walker_Nav_Menu
{
public function end_el(&$output, $item, $depth = 0, $args = array()) {
$dir = get_template_directory() . '/partials';
// Get file names from 'partials' directory
$scan = scandir($dir);
// Get css class names from menu elements
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
foreach($scan as $file) {
// Only grab files
if (!is_dir("$file")) {
// Just raw filenames
$strip_extension = pathinfo($file, PATHINFO_FILENAME);
// Match css class with filenames
if ($classes[0] == $strip_extension) {
// Append template part after closing </li>
$output .= "</li>" . get_template_part( 'partials/' . $strip_extension );
}
}
}
}
}
根据我的测试,当我将其他 html 附加到 $output
时,它会按预期直接显示在结束 </li>
元素之后。为什么 get_template_part
呈现在菜单结构上方?
因为模板部分直接输出echo's到浏览器,菜单在$output中,稍后会输出。 (这可能是非常糟糕的英语)
打开输出缓冲以获取模板部分的输出:
if ($classes[0] == $strip_extension) {
// Append template part after closing </li>
$output .= "</li>";
ob_start();
get_template_part( 'partials/' . $strip_extension );
$output .= ob_get_clean();
}
请参阅 ob_start() and ob_get_clean() 了解说明。
顺便说一句。 <ul>
元素应该只包含 <li>
个元素。也许这不是您额外输出的最佳位置。
我正在使用 wordpress walker class 在菜单 li
之后附加模板部分,但是它会将模板部分注入整个菜单结构之上。这是我得到的
class bt_menu_walker extends Walker_Nav_Menu
{
public function end_el(&$output, $item, $depth = 0, $args = array()) {
$dir = get_template_directory() . '/partials';
// Get file names from 'partials' directory
$scan = scandir($dir);
// Get css class names from menu elements
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
foreach($scan as $file) {
// Only grab files
if (!is_dir("$file")) {
// Just raw filenames
$strip_extension = pathinfo($file, PATHINFO_FILENAME);
// Match css class with filenames
if ($classes[0] == $strip_extension) {
// Append template part after closing </li>
$output .= "</li>" . get_template_part( 'partials/' . $strip_extension );
}
}
}
}
}
根据我的测试,当我将其他 html 附加到 $output
时,它会按预期直接显示在结束 </li>
元素之后。为什么 get_template_part
呈现在菜单结构上方?
因为模板部分直接输出echo's到浏览器,菜单在$output中,稍后会输出。 (这可能是非常糟糕的英语)
打开输出缓冲以获取模板部分的输出:
if ($classes[0] == $strip_extension) {
// Append template part after closing </li>
$output .= "</li>";
ob_start();
get_template_part( 'partials/' . $strip_extension );
$output .= ob_get_clean();
}
请参阅 ob_start() and ob_get_clean() 了解说明。
顺便说一句。 <ul>
元素应该只包含 <li>
个元素。也许这不是您额外输出的最佳位置。