输出博客帖子或_content()

时间:2013-04-02 作者:jason hong

在仪表板上的“添加页面”下,我在“文本”下有3节blockquotes

<blockquote id="section1">first</blockquote>

<blockquote id="section2">second</blockquote>

 <blockquote id="section3">third</blockquote>
所以,当我尝试在索引中输出它们时。php,我喜欢

<?php while(have_posts() ): the_post() ?>
    <div class="entry-content">
            <div id="first">.. </div>
            <div id="second"> ..</div>
            <div id="third"> .. </div>

        </div>

<?php endwhile;?>   
如何将blockquote id=section1输出到div id=first,blockquote id=section2输出到div id=second,blockquote id=section3输出到div id=third?

我们是否只有\\u content()函数?我们能把内容分解成我们想要的皮尔斯吗?

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

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并不简单,很容易出错。

结束

相关推荐

替换Pre标签之间的帖子中的html实体

我运行wordpressblog 使用语法荧光笔插件(Crayon). 该插件突出显示前置标记之间的代码,例如:<pre class=\"lang:languageid\" title=\"example\"> some code </pre> Wordpress有时会替换字符,例如\" & < > 使用代码中显示的html实体&quot; &amp; 我尝试了几个插件来防止这种情况,但它们(总是)不起作用。有没有一种简