Обернуть мета-бокс с и для каждой новой строки

Вопрос или проблема

Я пытаюсь автоматизировать один из аспектов наших публикаций. Мы размещаем много текстов песен и у нас есть система мета-боксов, которую мы используем для ввода различных данных о каждом тексте песни, который мы публикуем. Один аспект, который немного раздражает, это необходимость замены тегов <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; ?>

Объяснение кода:

  1. Получение метаданных: Мы извлекаем текст песен с помощью функции get_post_meta.
  2. Разделение на строки: Используем функцию explode для разделения текста на массив строк, используя символ новой строки (\n) в качестве разделителя.
  3. Цикл и вывод: Проходим по каждой строке с помощью foreach. Перед выводом строки мы удаляем лишние пробелы с помощью trim и проверяем, что строка не пуста. Если строка непустая, выводим её в теге <li>, используя esc_html для экранирования вывода.
  4. Обрамление в список: Каждая непустая строка будет выведена в своем теге <li>, что в итоге приводит к корректной форматовке списка.

Таким образом, вы получите необходимый вывод, без необходимости выполнения дополнительных замен текста или использования wpautop. Если у вас есть дополнительные вопросы, не стесняйтесь их задавать!

Оцените материал
Добавить комментарий

Капча загружается...