在 div PHP 之外返回的简码函数

Shortcode function returning outside of div PHP

我在 Wordpress 中为自定义菜单创建了一个简码。

问题是我的 $menu 显示在侧边导航和侧边导航菜单 div 的上方和外侧。

我试过 echoing/returning 没有将它存储在 $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");

好的,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这个变量了

wp_nav_menu() 将其输出回显到屏幕,这就是导致您的短代码出现问题的原因。如您所知,回显短代码中的任何内容都会产生意想不到的输出。 wp_nav_menu() 有一个名为 echo 的参数,默认设置为 true。您只需添加

'echo' => false, 

到你的 wp_nav_menu 个参数数组,这应该可以解决你的问题