Post内容作为单个数据块存储在*_posts
中的表post_content
柱它没有划分为多个部分,所以您想要的充其量也很棘手。
什么the_content
函数所做的就是从数据库中获取该数据块,对其运行一个或多个过滤器,以更改数据并将结果打印到屏幕上。原则上,您可以创建并使用其中一个过滤器来分解您的内容。
首先,如果您正在将区块引文硬编码到帖子正文中,为什么不直接避免麻烦并在<div>
s我看不出创造的意义<blockquote id="section1">first</blockquote>
仅将其转换为<div id="first">.. </div>
但如果你必须的话,这会让你离得很近。。。
global $replace_counter;
$replace_counter = 0;
function replace_bquotes($match) {
if (!empty($match)) {
global $replace_counter;
$replace_counter++;
return \'<div id="div-\'.$replace_counter.\'">\'.$match[1].\'</div>\';
}
}
function grab_blockquotes($content) {
$pattern = \'/<blockquote[^>]*>(.+)<\\/blockquote>/\';
$content = preg_replace_callback($pattern,\'replace_bquotes\',$content);
return $content;
}
add_filter(\'the_content\',\'grab_blockquotes\',1);
我突然想到,您试图以一种似乎将它们视为短代码的方式使用块引号。我建议实际使用短代码。
function div_maker($atts,$content) {
$id = \'\';
if (isset($atts[\'id\'])) {
$id = \'id="\'.esc_attr($atts[\'id\']).\'"\';
}
return \'<div \'.$id.\'>\'.$content.\'</div>\';
}
add_shortcode(\'dm\',\'div_maker\');
现在您可以创建
<div>
s与
[dm id="first"]First Content[/dm]
. 这减少了输入,应该更加健壮。与第一段代码一样,用regex解析HTML并不简单,很容易出错。