Вопрос или проблема
Я пытаюсь автоматизировать один из аспектов наших публикаций. Мы размещаем много текстов песен и у нас есть система мета-боксов, которую мы используем для ввода различных данных о каждом тексте песни, который мы публикуем. Один аспект, который немного раздражает, это необходимость замены тегов <li>
и </li>
в начале и в конце каждой новой строки текста песни. Я надеялся, что PHP сможет сделать это автоматически, но мой код сейчас не работает. Вот мой незатронутый код, который выводит куплет текста песни (мы используем wpautop
, чтобы сохранять переносы строк):
<?php if ( get_post_meta($post->ID, '_cmb_lyrics_1', true) ) : ?>
<?php $lyrics_1 = get_post_meta($post->ID, '_cmb_lyrics_1', true) ?>
<ul>
<?php echo wpautop( $lyrics_1) ; ?>
</ul>
<?php endif; ?>
А вот моя попытка вывести теги <li>
, которая не сработала. 🙁
<?php if ( get_post_meta($post->ID, '_cmb_lyrics_1', true) ) : ?>
<?php $lyrics_1 = get_post_meta($post->ID, '_cmb_lyrics_1', true) ?>
<ul>
<?php
echo "<li>\n"; wpautop( $lyrics_1) ; "</li>\n"; ?>
</ul>
<?php endif; ?>
Буду признателен за любую помощь. Спасибо.
Попробуйте:
<li>
<?php echo wpautop( $lyrics_1);?>
</li>
вместо этой строки:
<?php echo "<li>\n"; wpautop( $lyrics_1) ; "</li>\n"; ?>
правка: спасибо @Toscho за исправление синтаксиса, я допустил спешку в своей предыдущей правке 😉
Ответ или решение
Для автоматизации вывода строчек текста песен с обрамлением в теги <li>
и </li>
, вам нужно немного изменить ваш код. Вместо использования wpautop
, который добавляет теги <p>
и <br>
, вы можете обрабатывать текст вручную, разбивая его на строки и добавляя необходимые теги списка.
Вот пример кода, который выполнит вашу задачу корректно:
<?php if ( get_post_meta($post->ID, '_cmb_lyrics_1', true) ) : ?>
<?php $lyrics_1 = get_post_meta($post->ID, '_cmb_lyrics_1', true); ?>
<ul>
<?php
// Разделяем текст на строки и выводим каждую в теге <li>
$lines = explode("\n", $lyrics_1);
foreach ($lines as $line) {
// Удаляем лишние пробелы из строки
$line = trim($line);
// Проверяем есть ли строка и выводим в теге <li>
if (!empty($line)) {
echo "<li>" . esc_html($line) . "</li>\n";
}
}
?>
</ul>
<?php endif; ?>
Объяснение кода:
- Получение метаданных: Мы извлекаем текст песен с помощью функции
get_post_meta
. - Разделение на строки: Используем функцию
explode
для разделения текста на массив строк, используя символ новой строки (\n
) в качестве разделителя. - Цикл и вывод: Проходим по каждой строке с помощью
foreach
. Перед выводом строки мы удаляем лишние пробелы с помощьюtrim
и проверяем, что строка не пуста. Если строка непустая, выводим её в теге<li>
, используяesc_html
для экранирования вывода. - Обрамление в список: Каждая непустая строка будет выведена в своем теге
<li>
, что в итоге приводит к корректной форматовке списка.
Таким образом, вы получите необходимый вывод, без необходимости выполнения дополнительных замен текста или использования wpautop
. Если у вас есть дополнительные вопросы, не стесняйтесь их задавать!