Как отдельно вывести строку из записи WordPress?
Имеется запись в Wordpress для карусели. Контент записи разбит на 2 отдельных тега в html. В самой записи они написаны на разных строках. Возможно ли вывести для первого тега первую строку, а для второго тега вторую строку.
Дополнительно:
Ответы:
не знаю как конкретно в РНР это делается, но надо разделить строку, и откинуть то что не надо
- если вы не можете дать ответ который можно использовать решением, то это не ответ, а комментарий, и писать это надо в другом месте
- Антон Литвиненко, окей
kystick @kystick Автор вопроса Совместными усилиями с chatgpt удалось решить эту проблему.
<?php global $post; $myposts = get_posts([ 'numberposts' => -1, 'offset' => 1, ]); if( $myposts ){ foreach( $myposts as $post ){ setup_postdata( $post ); $content = get_the_content(); // Получаем содержимое записи $more_pos = strpos($content, 'more'); // Находим позицию строки "more" if ($more_pos !== false) { // Если найдено "more" $first_block = trim(substr($content, 0, $more_pos)); // Первая часть до "more" $second_block = trim(substr($content, $more_pos + 4)); // Вторая часть после "more" ?> <div class="news_block"> <?php the_post_thumbnail(); ?> <h3><?php the_title(); ?></h3> <p><?php echo $first_block; ?></p> <h4 class="news_date"><?php echo $second_block; ?></h4> </div> </div> <?php } } } wp_reset_postdata(); // Сбрасываем $post ?> |
<?php global $post; $myposts = get_posts([ 'numberposts' => -1, 'offset' => 1, ]); if( $myposts ){ foreach( $myposts as $post ){ setup_postdata( $post ); $content = get_the_content(); // Получаем содержимое записи $more_pos = strpos($content, 'more'); // Находим позицию строки "more" if ($more_pos !== false) { // Если найдено "more" $first_block = trim(substr($content, 0, $more_pos)); // Первая часть до "more" $second_block = trim(substr($content, $more_pos + 4)); // Вторая часть после "more" ?> <div class="news_block"> <?php the_post_thumbnail(); ?> <h3><?php the_title(); ?></h3> <p><?php echo $first_block; ?></p> <h4 class="news_date"><?php echo $second_block; ?></h4> </div> </div> <?php } } } wp_reset_postdata(); // Сбрасываем $post ?>
в саму запись вордпресс нужно добавить слово more. Она выглядит вот так:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Можно, но лучше не привязываться к «первой строке» визуально. В контенте WordPress могут быть абзацы, блоки Gutenberg, переносы строк, shortcode и служебные комментарии. Надёжнее использовать явный разделитель или отдельные поля.
Если это карусель и у каждого слайда есть две отдельные строки, правильнее сделать два ACF-поля, например
slide_textиslide_date. Тогда вывод будет простым и устойчивым:<p><?php echo esc_html(get_field('slide_text')); ?></p> <h4 class="news_date"><?php echo esc_html(get_field('slide_date')); ?></h4>
Если поля добавлять нельзя, используйте разделитель в тексте, например
<!--more-->или свой маркер:$content = get_the_content(); $parts = preg_split('/<!--more-->|Rs*R/', $content, 2); $first_block = trim(wp_strip_all_tags($parts[0] ?? '')); $second_block = trim(wp_strip_all_tags($parts[1] ?? ''));
Вывод:
echo '<p>' . esc_html($first_block) . '</p>'; echo '<h4 class="news_date">' . esc_html($second_block) . '</h4>';
Ваш вариант со
strpos($content, 'more')может сработать, но он слишком общий: словоmoreможет встретиться в тексте. Лучше искать конкретный маркер<!--more-->или использовать поля.