我在Wordpress中为自定义菜单创建了一个短代码。
问题是我的$菜单显示在side-nav和side-nav-menu div的上方和外部。
我尝试过回复/返回它而不将其存储在$ var中,我也遇到了同样的问题。
我错过了什么吗?
function custom_menu() {
$menu = wp_nav_menu( array( 'theme_location' => 'product-menu' ) );
$var = '<div class="side-nav">
<div class="side-nav-menu product- nav">
<p>Products</p>' . $menu . '
</div></div>';
return $var;
}
add_shortcode("custom", "custom_menu");
答案 0 :(得分:5)
<div class="menuBtn">click</div>
<table class="whole" border="1px">
<tr>
<th class="menu">Delete</th>
<th>Data1 c</th>
<th>date2 c</th>
</tr>
<tr>
<td class="menu">
<input type="checkbox" value="Bike">
</td>
<td>data</td>
<td>date1</td>
</tr>
<tr>
<td class="menu">
<input type="checkbox" value="car">
</td>
<td>data2</td>
<td>date3</td>
</tr>
</table>
将其输出回显到屏幕,这就是导致短信中出现问题的原因。如您所知,回显短代码中的任何内容都会产生意外输出。 wp_nav_menu()
有一个名为wp_nav_menu()
的参数,默认设置为true。你可以添加
echo
到您的'echo' => false,
参数数组,这应该可以解决您的问题
答案 1 :(得分:1)
好的,默认情况下wp_nav_menu()
回声,所以要将它存储在一个变量中,就像你使用常规小部件一样 - 输出缓冲:
function custom_menu() {
ob_start();
wp_nav_menu( array( 'theme_location' => 'product-menu' ) );
$menu = ob_get_contents();
ob_end_clean();
$var = '<div class="side-nav">
<div class="side-nav-menu product- nav">
<p>Products</p>' . $menu . '
</div></div>';
return $var;
}
add_shortcode("custom", "custom_menu");
这应该有用。
您正在做的是使用ob_start();
启动输出缓冲区,然后您在内部回显的所有内容都会被缓冲区捕获,然后您在$menu
变量中输出缓冲区的内容,并清除缓冲。然后,您可以根据需要安全地使用$menu
变量