我已经为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标签