插入模板-内容内的部分

时间:2018-02-25 作者:IXN

我想在我博客帖子的内容内显示一个带有链接的图像/横幅。无论是开始还是结束。它应该出现在帖子内容的某个地方。我不想使用短代码,我需要将横幅自动插入到所有帖子中。

首先,我创建了一个带有横幅的模板部件,可以使用以下方法轻松调用:

<?php get_template_part( \'template-parts/banner\' ); ?>
我认为这是一个好的规则,就是在第三段之后插入横幅。或者在300字之后。或900个字符之后。或者类似的东西。如果文章太短,我不需要显示模板部分。

有谁能帮我做到这一点吗?

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

我在这里看到的主要问题是get_template_part() 在这种情况下发挥作用。这并不是最好的方式,因为我们将过滤你帖子的内容,你可能需要获取横幅的标记,而不是立即输出。阅读更多信息here.

我建议将baner标记保留在单独函数的变量或返回值中,如下所示:

function get_banner_html() {
    return \'<div class="baner">Your baner HTML here</div>\';
}
然后,您可以使用WordPress挂钩轻松过滤所有帖子的内容:

function insert_banner_into_content( $content ) {

    // make sure we\'re affecting only posts
    if ( \'post\' !== get_post_type() ) {
        return $content;
    }

    // split content by paragraph tag
    $paragraphs = explode( \'<p>\', $content );

    // continue only when post has 3 paragraphs or more
    if ( count( $paragraphs ) < 3 ) {
        return $content;
    }
    // add banner after 3rd paragraph
    $paragraphs[2] .= get_banner_html();

    // return modified content
    return implode( \'<p>\', $paragraphs );
}
// hook it up!
add_filter( \'the_content\', \'insert_banner_into_content\' );

结束

相关推荐

Functions.php过滤器未应用于AJAX调用

我已经使用php向菜单中添加了一个元素(为了便于说明,简化了代码):add_filter( \'wp_nav_menu_\' . $menu_slug . \'_items\', \'add_menu_item\' , 10, 2 ); function add_menu_item ( $items ) { $item = sprintf(\'<li class=\"custom-item\">%s</li>\', menu_item_content ()