PHP echo失败,但返回有效


PHP echo fails but return works?

我已经为wordpress插件shortcode做了以下操作,return工作正常,但echo/print似乎不工作。echo/print在文件中的其他任何位置都不存在,所以我想它被禁用了,或者其他什么,如果可能的话。

因此,如果不使用echo/print,我如何将以下内容压缩为一个if语句,其中包含return而不是echo/print。数组$subjecttitle中有20个受试者,所以一个更优雅的解决方案会更好。

function subjecttitle_func( $atts ){
  $subjecttitle = get_field('gcse_subjects');
  if (!empty($subjecttitle[0])) {
    echo '<h2>' . $subjecttitle[0] .'</h2>'.'<hr></hr>';
  } else { 
    return "";
  } 
  if (!empty($subjecttitle[1])) {
    echo '<h2>' . $subjecttitle[1] .'</h2>'.'<hr></hr>';
  } else { 
    return "";
  }
}
add_shortcode( 'subjecttitle', 'subjecttitle_func' );

据我所知,短代码是在_content()运行之前处理的(通常是通过cms放置短代码的地方),所以如果你从那里回声,它们可能会出现在奇怪的地方。如果你在浏览器中搜索你的源代码,寻找你要回显的内容,它可能会在的某个地方

返回输出是正确的方法,并且您可能想要执行以下操作:

/**
* Create and return the subject title string
*/
function subjecttitle_func( $atts ){
  $subjecttitle = get_field('gcse_subjects');
  $output = '';
  foreach ($subjecttitle as $title) { 
    if ( strlen($title) > 0 ) {
      $output .= '<h2>' . $title .'</h2>'.'<hr />';
    }
  }
  return $output;
}
/** 
* Add the subject title shortcode
*/
add_shortcode( 'subjecttitle', 'subjecttitle_func' );

使用implode怎么样例如

echo '<h2>' . implode(' - ',$subjecttitle) .'</h2><hr></hr>';

这将导致同时具有所有主题标题的单个h2标签(用a-分隔)或

echo '<h2>' . implode('</h2><hr></hr><h2>',$subjecttitle) .'</h2><hr></hr>';

如果您想要为每个sibrojecttitle 有一个自己的h2标签