有两个主要问题。
第一个是直接在短代码中输出开头divShortcodes must never echo or output directly, they always return a HTML string。
因此,在显示帖子内容之前,已经将其发送到浏览器:
<div class="blog__grid">
你很幸运你用这个包装了整个帖子内容,否则你会注意到开头标签总是在开头。
不仅如此,还有:
处理此帖子的AJAX请求将被破坏,REST API端点将被破坏,XMLRPC将被破坏,网站地图将被破坏,如果您的短代码支持嵌套内容,则该内容将出现在短代码之后,而不是短代码内部,如果此短代码出现在另一个短代码中,它也会被破坏,此短代码的一部分将始终出现在帖子内容的开头,即使它不在开头,也会出现无效的XML错误或无效的JSON语法错误
但这导致了第二个问题您永远没有机会输出结束标记
查看此代码:
return $allposts;
} ?>
</div>
请注意,如果找到帖子,
$allposts
返回,不提供关闭的机会
</div>
待发送。
因此,取而代之的是:
不要输出开始和结束标记,而是在变量中分配它们,让我们调用它$output
;不返回$allposts
, 将其添加到$output
具有$output .= $allposts;
以结束函数return $output;
如果必须使用直接输出的代码,请将其包装在输出缓冲区中。