В WordPress при выводе постов вставляются лишние теги
Вот код вывода постов
<?php
$ids = get_field( 'news_thumbs');
$news_count = get_field( 'news_count');
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
$query = new WP_Query( [
'post_type' => 'news',
'posts_per_page' => $news_count,
'post__in' => $ids,
'paged' => $paged,
'orderby' => 'post__in',
'order' => 'ASC'
]);
if ( $query->have_posts() ) {?>
<div class="news_thumbnails">
<? while ( $query->have_posts() ) : $query->the_post();
$service_title = get_field('news_card_title');
$newsDescript = get_field('news_descript');
$news_miniature = get_field('news_miniature');
$news_date = get_field('news_date');
if(!empty($news_date)) {
$newsDate = $news_date;
} else {
$newsDate = get_the_time('d.m.Y');
}
?>
<div class="news_thumb animate fadeInUp">
<div class="img_box_wrapp_2">
<div class="date">
<p><? echo $newsDate; ?></p>
</div>
<div class="img_box">
<? echo wp_get_attachment_image( $news_miniature, 'news' ); ?>
</div>
</div>
<div class="news_thumb_descript">
<h3><? echo $service_title; ?></h3>
<div class="p_wrapp_thumb">
<? echo $newsDescript; ?>
</div>
</div>
<div class="news_thumb_footer">
<a href="<?php the_permalink(); ?>" class="more_link">Подробнее</a>
</div>
</div>
<?
endwhile;
?></div><?
wp_reset_postdata();
?>
<?} else {?>
<h3>У вас нет новостей</h3>
<? } ?>
Некоторые карточки он выводит так
Какие-то он выводит так
То есть видно что он в некоторых карточек в .p_wrapp_thumb вставляет лишний .news_thumb_descript. Как сделать так чтобы в .p_wrapp_thumb не вставлялся .news_thumb_descript ?
Ответы (2 шт):
Нашел такой вот выход с помощью JQuery
$('.news_thumb').each(function() {
pWrapp = $(this).find(".p_wrapp_thumb");
if(pWrapp.find(".news_thumb_descript").length > 0) {
pWrapp.find("p").unwrap();
}
});
Раз уж на то пошло и Вы решили очистить при помощи jQuery вашу строку, я бы Вам предложил сделать это при помощи уже имеющихся средств WordPress, а именно wp_kses() или wp_kses_post() (в wp_kses() вы указываете разрешенные теги и их атрибуты в качестве параметра, а wp_kses_post() оставляет HTML теги разрешенные для публикации в записи для текущего пользователя, в вашем случае должно оставить просто div и уберет атрибут class). Например:
<div class="news_thumb animate fadeInUp">
<div class="img_box_wrapp_2">
<div class="date">
<p><?php echo $newsDate; ?></p>
</div>
<div class="img_box">
<?php echo wp_get_attachment_image( $news_miniature, 'news' ); ?>
</div>
</div>
<div class="news_thumb_descript">
<h3><?php echo $service_title; ?></h3>
<div class="p_wrapp_thumb">
<?php // В качестве второго параметра передается список допустимых HTML элементов в переданном контенте. https://wp-kama.ru/function/wp_kses
<?php echo wp_kses( $newsDescript, [
'p' => [] // в данном случае я Вам оставил только тег <p>
] ); ?>
</div>
</div>
<div class="news_thumb_footer">
<a href="<?php the_permalink(); ?>" class="more_link"><?php esc_html_e( 'Подробнее' ); ?></a>
</div>
</div>

