是否按大小拆分_Content()?

时间:2015-11-23 作者:o_O

我遇到的情况是,用户不想在帖子正文中设置引号的格式,只想粘贴内容,在自定义字段中指定一个引号,模板现在将在网站上查看帖子时呈现引号。

我决定这样做的方式是在帖子上添加一个自定义字段,并在模板中调用它。我想看看有没有分裂的方法the_content(), 打印自定义字段,然后打印其余字段the_content().

到目前为止,我已经:

<?php
    $quoteCheck = array();
    $key = \'quote\';
    $quote = get_post_meta($post->ID, $key, $single = true);
    if(!empty($quote)){
        $quoteCheck[] = array(
            \'quote\' => $quote
        );
    }
    if(!empty($quoteCheck)){
        //print 1st half the_content();
    ?>
        <blockquote><?php echo $quote[\'quote\']; ?></blockquote>
    <?php
        //print 2nd half the_content();
    } else {
        the_content();
    }
?>
这将检查是否已将报价添加为自定义字段,如果为true,则将格式化内容,否则仅打印内容。

理想情况下,我想考虑两件事:

1) 确定内容的大小(可能是字符数)并将其拆分到中间(2)确定拆分后的下一段以执行实际拆分。

我不想把单词或句子中间分开。我想找到中间部分,然后找到下一段的分句,在那里进行拆分。

我一直在审查Google对内容的拆分,但没有找到任何有意义的内容,在创建帖子时需要用户格式化。我找到了添加<!-- more --> 打断页面,但如果他们无法添加<blockquote> 无法添加到页面<!-- more --> 到页面。

1 个回复
SO网友:tao

函数假定wpautop 过滤器打开the_content 位于优先级10,WP将其添加到该优先级。如果出于任何原因,它已被移动到另一个优先级,则应将下面的筛选器调整为在wpautop.

函数过滤器the_content 如果我们在前端,并且我们在一个单一的帖子/页面上(请随意调整,以便它适用于您实际需要的地方),那么它会检查此特定帖子是否有报价自定义字段。

如果满足以上所有条件,则将内容拆分为两部分,并替换第一次出现的</p> 从下半场开始</p> + $quote. 你也会注意到我从$split_point 如果$content 长度大于8。这样做是为了包括实际拆分发生在结尾内的情况</p>.

add_filter(\'the_content\', \'split_by_quote\', 11);
function split_by_quote($content) {
    global $post;
    $custom_meta_key = \'quote\';
    $tag             = \'blockquote\';
    if ((!is_admin()) && is_singular(array(\'post\', \'page\')) // adjust to your needs
    && $quote = get_post_meta($post->ID, $custom_meta_key, true)) {
        $split_point = intval(strlen($content)/2);
        $split_point = strlen($content > 8) ? $split_point - 4 : $split_point;
        $first_half  = substr($content, 0 , $split_point);
        $second_half = substr($content, $split_point);
        $second_half = preg_replace(
            \'|<\\/p>|\',
            "</p><{$tag}>".$quote."</{$tag}>",
            $second_half,
            1
        );
        $content     = $first_half.$second_half;
    }

    return $content;
}
这个应该放进去functions.php 你的主题,最好是儿童主题。如果您只想在特定的帖子或页面中使用它,只需添加is_page({id_here})is_single({id_here}) 根据滤清器的状况,拆下is_singular().

针对没有</p> 在下半年,它不会输出报价,但这基本上意味着wpautop 未对该内容运行筛选器。因此添加:

remove_filter(\'the_content\', \'wpautop\');
add_filter(\'the_content\', \'wpautop\');
在你的functions.php 应使其工作(输出报价)。

如果你的所有内容都在一个大的</p>, 报价将在内容之后输出。

另一件需要检查的事情是,您是否在与$tag (您不希望在另一个blockquote中包含blockquote)。上述函数不进行该检查。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请