获取和修剪WP查询中的完整帖子内容

时间:2018-08-01 作者:Summer Developer

简单的任务,但不起作用:

<?php 
$content = apply_filters( \'the_content\', get_the_content() );
$contentWithoutHTML = wp_strip_all_tags($content);
$pos = strpos($contentWithoutHTML, " ", 100);
$contentFinal = substr($contentWithoutHTML,0,$pos ); 
echo $contentFinal . "...";
?>
我的帖子长度超过100个字符(带空格),但我strpos(): Offset not contained in string 错误,这让我相信它实际上并没有提取整个内容字符串。但我应用了我认为应该使用的过滤器。。。请协助。有时,即使没有偏移误差,我也会... 尽管如此,还是有超过100个带空格的字符。。。虽然有时它是有效的。为什么不一致?

这是一个WP_Query 循环,其中大多数都工作,但其中一些不。。。所以我很确定这是一个字符串,因为我看到它发生在循环中的其他帖子上。。。

完整循环:

<?php
$args = array(
    \'orderby\' => \'ID\',
    \'order\' => \'ASC\',
    \'posts_per_page\' => 7,
    \'meta_query\' => array(
        array(
            \'key\' => \'_thumbnail_id\'
        )
    )
);
$query = new WP_Query($args);
while ($query->have_posts()):
    $query->the_post();
?>
                            <div class="articleboxs boxs">
                                <div class="col-sm-4 noleft">
                                    <div class="aricleleft boxs">
                                      <?php the_post_thumbnail(\'medium\', array(
        \'class\' => \'img-responsive\'
    )) ?>  
                                    </div>
                                </div>
                                <div class="col-sm-8 noright">
                                    <div class="aricleright boxs">
                                        <div class="boxs">
                                             <a href="<?php echo get_permalink(); ?>"><h2 class="heading font_Libre"><?php the_title(); ?></h2></a>
                                                <?php
    $content = apply_filters(\'the_content\', get_the_content(\'\', true));
    print_r($content);
    $contentWithoutHTML = wp_strip_all_tags($content);
    $pos = strpos($contentWithoutHTML, " ", 100);
    $contentFinal = substr($contentWithoutHTML, 0, $pos);
?>
                                 <p class="font_Roboto"><?php echo $contentFinal . "..."; ?></p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                          <?php
endwhile;
wp_reset_postdata();
?>

2 个回复
SO网友:Tyler Johnson

我认为最好的办法是简化你正在做的事情。如果您只想减少输出的字符量,我只想用它做一些简单的事情。我会用mb_strimwidth 修剪字符,并在该运行中wp_strip_all_tags() 在…上get_the_content(). 像这样:

$content = mb_strimwidth(wp_strip_all_tags(get_the_content()), 0, 100, \'...\');
echo $content;
编辑:忘了注意,如果您的内容中有短代码,我强烈建议不要使用短代码,您可能还需要包装get_the_content() 具有strip_shortcodes().

SO网友:Summer Developer

这个问题的答案在于

get_the_content()

现在我很清楚,这个函数的设计目的并不是为了在循环中获取帖子的全部内容,这就是为什么这个函数的一部分要讨论$more_link_text$strip_teaser 作为参数,关于被修剪的文本。

此外apply_filters(\'the_content\', get_the_content(\'\', true)) 没有解决这个根本问题,它只是对内容进行一些HTML更改。

因此,在我的循环中,我引用了全局$post.

$post->post_content 然后做strpossubstr 从那里开始。

基本上,当我在做自己的修剪/摘录功能时,我可以绕过get_the_content() 完全因为我也想把它放到<p> 标记,我的代码可以如下所示:

<?php 
$contentWithoutHTML = wp_strip_all_tags($post->post_content);
$pos = strpos($contentWithoutHTML, " ", 100);
$contentFinal = substr($contentWithoutHTML,0,$pos ); 
?>
<p class="font_Roboto"><?php echo $contentFinal . "..."; ?></p>
不要忘记重置WP_Query 之后,以保持杠杆作用$post 成功,具有wp_reset_postdata(); 循环之后。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post