Как отдельно вывести строку из записи WordPress?

Ссылка скопирована
1 ответ

Имеется запись в Wordpress для карусели. Контент записи разбит на 2 отдельных тега в html. В самой записи они написаны на разных строках. Возможно ли вывести для первого тега первую строку, а для второго тега вторую строку.

Как отдельно вывести строку из записи Wordpress?

Как отдельно вывести строку из записи Wordpress?

Дополнительно:

Ответы:

не знаю как конкретно в РНР это делается, но надо разделить строку, и откинуть то что не надо

  • если вы не можете дать ответ который можно использовать решением, то это не ответ, а комментарий, и писать это надо в другом месте
  • Антон Литвиненко, окей

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?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
WordPress-редакция Ответ

Можно, но лучше не привязываться к «первой строке» визуально. В контенте 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>

<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('/&lt;!--more--&gt;|Rs*R/', $content, 2);
 
$first_block = trim(wp_strip_all_tags($parts[0] ?? ''));
$second_block = trim(wp_strip_all_tags($parts[1] ?? ''));

$content = get_the_content(); $parts = preg_split('/&lt;!--more--&gt;|Rs*R/', $content, 2); $first_block = trim(wp_strip_all_tags($parts[0] ?? '')); $second_block = trim(wp_strip_all_tags($parts[1] ?? ''));

Вывод:

echo '&lt;p&gt;' . esc_html($first_block) . '&lt;/p&gt;';
echo '&lt;h4 class="news_date"&gt;' . esc_html($second_block) . '&lt;/h4&gt;';

echo '&lt;p&gt;' . esc_html($first_block) . '&lt;/p&gt;'; echo '&lt;h4 class="news_date"&gt;' . esc_html($second_block) . '&lt;/h4&gt;';

Ваш вариант со strpos($content, 'more') может сработать, но он слишком общий: слово more может встретиться в тексте. Лучше искать конкретный маркер <!--more--> или использовать поля.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно