【问题标题】:Shortcode function returning outside of div PHP在 div PHP 之外返回的简码函数
【发布时间】:2015-08-18 08:37:04
【问题描述】:

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

问题是我的 $menu 出现在 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");

【问题讨论】:

  • @dingo_d 感谢您的回复。我尝试了下面的编辑,但它坏了。我会在连接中这样添加它吗? '.wp_nav_menu(array('theme_location' => 'product-menu').' add_shortcode("custom", "custom_menu");

标签: php wordpress shortcode


【解决方案1】:

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

'echo' => false, 

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

【讨论】:

  • 简单且比输出缓冲好得多。 @EmmaHarris 如果这解决了问题,那么请考虑accepting it 关闭问题。
  • 感谢@birgire 的评论
【解决方案2】:

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

【讨论】:

  • 仅将输出缓冲作为最后的手段。只需要将echo参数设置为false
  • 如果 Pieter 说你应该把它作为最后的手段,那就用他的方法代替,他知道他在说什么:)
  • 它仍然是非常有效和有效的替代方法,特别是如果没有其他构建解决方法。就在这种情况下,您正在做很多影响性能的不必要的工作。 :-)
猜你喜欢
  • 2013-07-18
  • 2018-08-19
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 2021-10-11
  • 2012-07-20
  • 2021-10-25
相关资源
最近更新 更多