Вопрос: Получить и обрезать полный пост содержание в WP Query

Простая задача, но она не работает:

<?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 (): Ошибка смещения, не содержащаяся в строке , которая заставляет меня поверить, что она фактически не вытягивает всю строку содержимого. Но я применил фильтры, как я считаю, я должен ... пожалуйста, помогите. Также иногда, даже если я не получаю ошибку смещения, я просто получаю ... , хотя, опять же, более 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>                          <?phpendwhile;wp_reset_postdata();?>

Ответы и комментарии:

Моя проблема в том, что даже $ content = apply_filters ('the_content', get_the_content ('', TRUE)); print_r ($ content); не распечатывает весь контент для нескольких сообщений в моем запросе ...
Создан 01-08-2018 08:47 Summer Developer

Я думаю, что лучше всего было бы просто упростить то, что вы делаете. Я просто сделал бы что-то простое с этим, если бы все, что вы пытаетесь сделать, это обрезать количество выводимых символов. Я бы использовал 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 ().
Создан 01-08-2018 05:56 Tyler Johnson1064

Ответ на этот вопрос заключается в роли
get_the_content ()
Как теперь понятно для меня, эта функция не предназначена для получения всего содержимого публикации в цикле, поэтому часть функции говорит о $ more_link_text и $ strip_teaser в качестве аргументов в отношении текста, который обрезается ,
Кроме того, apply_filters ('the_content', get_the_content ('', true)) не решает эту фундаментальную проблему, он просто вносит некоторые HTML-изменения в содержимое.
Поэтому вместо этого в моем цикле я ссылаюсь на глобальный пост $.
$ post-> post_content и сделайте оттуда strpos и substr.
По сути, поскольку я делаю свою собственную функцию обрезки / отрывка, я могу полностью обойти get_the_content (). Поскольку я также хочу поместить это прямо в тег

, мой код может выглядеть так:
<? PHP
$ contentWithoutHTML = wp_strip_all_tags ($ post-> post_content);
$ pos = strpos ($ contentWithoutHTML, "", 100);
$ contentFinal = substr ($ contentWithoutHTML, 0, $ pos);
?>

<? php echo $ contentFinal. "..."; ?> P>

Не забудьте сбросить WP_Query после, чтобы успешно использовать $ post, с wp_reset_postdata (); после петли.

Создан 02-08-2018 03:03 Summer Developer205112