在div PHP之外返回的短代码函数

时间:2015-08-18 08:37:05

标签: php wordpress shortcode

我在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");

2 个答案:

答案 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变量