WordPress добавляет теги ‹p› и ‹br›, если я не использую wp_reset_postdata() в цикле. Почему?

У меня есть простой цикл запросов WordPress WP для пользовательских данных типа записи. Из-за фильтрации данных с помощью FacetWP мне пришлось удалить wp_reset_postdata(). В противном случае фильтрация ajax не работает.

Но если я удалю wp_reset_postdata(), WordPress добавит много тегов p и br в мой HTML-контент. Почему?

Мой код:

// WP_Query args
$args = array(
    'posts_per_page' => 20,
    'order' => 'ASC',
    'orderby' => 'title',
    'ignore_sticky_posts' => true,
    'post_type' => 'abc',
    'facetwp' => true
  );

  // The Query
  $abc_query = new \WP_Query($args);
  
  // The Loop
  if ( $abc_query->have_posts() ) {
    while ( $abc_query->have_posts() ) {
      $abc_query->the_post();
      ?>

      <div id="abc-wrapper">
      
      <ul class="abc-list">
        <li class="abc-list-elem">
            <h4 class="abc-title">
                <?php the_title(); ?>
            </h4>
            <span class="abc-desc">
                <?php the_content(); ?>
            </span>
            <?php 
                $terms = get_the_terms(get_the_ID(), 'abc_types');
                foreach($terms as $t) {
                    ?>
                        <span class="abc-badge">
                            <?php echo $t->name ?>
                        </span>
                    <?php
                }
            ?>
        </li>
      </ul>
      </div>



      <?php
    }
  } else {
    // There are no posts
  }

}

У вас есть идея, почему WordPress добавляет много тегов p и br, если я не сбрасываю постданные с помощью wp_reset_postdata()?


person asored    schedule 25.02.2021    source источник


Ответы (1)


wp_reset_postdata как не влияет на the_content форматирование.

После обработки отдельного запроса эта функция восстанавливает глобальную переменную $post в текущую запись в основном запросе.

Когда вы выводите содержимое в цикле, вы можете дезинфицировать вывод, чтобы удалить все теги, используя wp_strip_all_tags.

Правильно удалите все теги HTML, включая скрипт и стиль.

<?php wp_strip_all_tags( the_content(), true ); ?>

(true или false для разрыва строки).

Кроме того, вы можете удалить любой автоматический тег <p>, применяемый в качестве разрыва строки, удалив wpautop через remove_filter в файле function.php.

<?php remove_filter( 'the_content', 'wpautop' ); ?>
person amarinediary    schedule 25.02.2021