Разделить содержимое на несколько колонок с помощью тега more?

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

Во-первых, это практически точная копия:
Split columns into three+ divs?

Но предложенное решение не работает (возвращает пустой результат). Я предполагаю, что оно конфликтует с qTranslate, который добавляет очень странные комментарии в HTML, но я не уверен.

Я нашел отличный фрагмент кода, который просто разделяет контент на части по тегу more. Проблема в том, что он, по-видимому, делит только на две колонки. Он игнорирует остальные теги more. На самом деле я не делю контент на колонки, а скорее на горизонтальные секции (с разделителем между ними).

Текущий код:

function split_content() {
    global $more;
    $more = true;
    $content = preg_split('/<span id="more-\d+"><\/span>/i', get_the_content('more'));
    for($c = 0, $csize = count($content); $c < $csize; $c++) {
        $content[$c] = apply_filters('the_content', $content[$c]);
    }
    return $content;
}

Предложенное решение в связанной ветке не работает, и я искал другие решения, но ничего рабочего не нашел.

Важно, чтобы контент возвращался как массив “колонок”. Например, $content[0] является колонкой 1, $content[1] является колонкой 2 и так далее.

Какие-нибудь идеи?

Почему бы просто не создать несколько шорткодов для того, что вам нужно?

Вы можете создать колонки для всех видов использования,

добавьте это в файл function.php вашей темы.

<?php
function yourtheme_one_third( $atts, $content = null ) {
   return '<div class="one_third">' . do_shortcode($content) . '</div>';
}
add_shortcode('one_third', 'yourtheme_one_third');

function yourtheme_one_third_last( $atts, $content = null ) {
   return '<div class="one_third last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('one_third_last', 'yourtheme_one_third_last');

function yourtheme_two_third( $atts, $content = null ) {
   return '<div class="two_third">' . do_shortcode($content) . '</div>';
}
add_shortcode('two_third', 'yourtheme_two_third');

function yourtheme_two_third_last( $atts, $content = null ) {
   return '<div class="two_third last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('two_third_last', 'yourtheme_two_third_last');

function yourtheme_one_half( $atts, $content = null ) {
   return '<div class="one_half">' . do_shortcode($content) . '</div>';
}
add_shortcode('one_half', 'yourtheme_one_half');

function yourtheme_one_half_last( $atts, $content = null ) {
   return '<div class="one_half last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('one_half_last', 'yourtheme_one_half_last');

function yourtheme_one_fourth( $atts, $content = null ) {
   return '<div class="one_fourth">' . do_shortcode($content) . '</div>';
}
add_shortcode('one_fourth', 'yourtheme_one_fourth');

function yourtheme_one_fourth_last( $atts, $content = null ) {
   return '<div class="one_fourth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('one_fourth_last', 'yourtheme_one_fourth_last');

function yourtheme_three_fourth( $atts, $content = null ) {
   return '<div class="three_fourth">' . do_shortcode($content) . '</div>';
}
add_shortcode('three_fourth', 'yourtheme_three_fourth');

function yourtheme_three_fourth_last( $atts, $content = null ) {
   return '<div class="three_fourth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('three_fourth_last', 'yourtheme_three_fourth_last');

function yourtheme_one_fifth( $atts, $content = null ) {
   return '<div class="one_fifth">' . do_shortcode($content) . '</div>';
}
add_shortcode('one_fifth', 'yourtheme_one_fifth');

function yourtheme_one_fifth_last( $atts, $content = null ) {
   return '<div class="one_fifth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('one_fifth_last', 'yourtheme_one_fifth_last');

function yourtheme_two_fifth( $atts, $content = null ) {
   return '<div class="two_fifth">' . do_shortcode($content) . '</div>';
}
add_shortcode('two_fifth', 'yourtheme_two_fifth');

function yourtheme_two_fifth_last( $atts, $content = null ) {
   return '<div class="two_fifth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('two_fifth_last', 'yourtheme_two_fifth_last');

function yourtheme_three_fifth( $atts, $content = null ) {
   return '<div class="three_fifth">' . do_shortcode($content) . '</div>';
}
add_shortcode('three_fifth', 'yourtheme_three_fifth');

function yourtheme_three_fifth_last( $atts, $content = null ) {
   return '<div class="three_fifth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('three_fifth_last', 'yourtheme_three_fifth_last');

function yourtheme_four_fifth( $atts, $content = null ) {
   return '<div class="four_fifth">' . do_shortcode($content) . '</div>';
}
add_shortcode('four_fifth', 'yourtheme_four_fifth');

function yourtheme_four_fifth_last( $atts, $content = null ) {
   return '<div class="four_fifth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('four_fifth_last', 'yourtheme_four_fifth_last');

function yourtheme_one_sixth( $atts, $content = null ) {
   return '<div class="one_sixth">' . do_shortcode($content) . '</div>';
}
add_shortcode('one_sixth', 'yourtheme_one_sixth');

function yourtheme_one_sixth_last( $atts, $content = null ) {
   return '<div class="one_sixth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('one_sixth_last', 'yourtheme_one_sixth_last');

function yourtheme_five_sixth( $atts, $content = null ) {
   return '<div class="five_sixth">' . do_shortcode($content) . '</div>';
}
add_shortcode('five_sixth', 'yourtheme_five_sixth');

function yourtheme_five_sixth_last( $atts, $content = null ) {
   return '<div class="five_sixth last">' . do_shortcode($content) . '</div><div class="clearboth"></div>';
}
add_shortcode('five_sixth_last', 'yourtheme_five_sixth_last');
?>

Затем добавьте немного CSS в файл style.css вашей темы

.one_half{ width:48%; }
.one_third{ width:30.66%; }
.two_third{ width:65.33%; }
.one_fourth{ width:22%; }
.three_fourth{ width:74%; }
.one_fifth{ width:16.8%; }
.two_fifth{ width:37.6%; }
.three_fifth{ width:58.4%; }
.four_fifth{ width:67.2%; }
.one_sixth{ width:13.33%; }
.five_sixth{ width:82.67%; }
.one_half,.one_third,.two_third,.three_fourth,.one_fourth,.one_fifth,.two_fifth,.three_fifth,.four_fifth,.one_sixth,.five_sixth{ position:relative; margin-right:4%; float:left; }
.last{ margin-right:0 !important; clear:right; }
.clearboth {clear:both;display:block;font-size:0;height:0;line-height:0;width:100%;}

Затем при написании поста используйте свои новые шорткоды для создания областей для конкретного текста и т.д.

[one_third]текст здесь[/one_third]
[one_third_last]текст здесь[/one_third_last]
[two_third]текст здесь[/two_third]
[two_third_last]текст здесь[/two_third_last]
[one_half]текст здесь[/one_half]
[one_half_last]текст здесь[/one_half_last]
и так далее... и так далее...

Измените все названия функций, чтобы они подходили вашей теме, и отредактируйте любой CSS, чтобы настроить его в соответствии с вашими настройками темы и т.д.

полный источник здесь
http://tutorials.mysitemyway.com/adding-column-layout-shortcodes-to-a-wordpress-theme/

Marty

Ответ или решение

Разделение контента на несколько колонок с использованием тега "more" в WordPress может быть сложной задачей, особенно если требуемое решение не изначально поддерживается существующими плагинами или темами. Рассмотрим теоретическую основу, практический пример и непосредственно реализацию для эффективного достижения этой цели.

Теория

Основной принцип работы с тегом "more" в WordPress заключается в том, что он обычно используется для сокращения как текста на главной странице блога, так и в RSS. Однако, если мы хотим использовать эту функциональность для деления контента на несколько частей, необходимо внести изменения в код темы или использованного плагина. Это связано с особенностями обработчика контента в WordPress, который по умолчанию рассчитывает на одно целевое разделение.

Пример

Предположим, у нас есть пост, содержащий несколько тегов "more", и мы хотим отображать соответствующие части контента в разных разделах страницы. Для этого необходимо модифицировать функцию разбора контента и, возможно, пересмотреть способ рендеринга данных на уровне темы.

Код, приведенный в начальном запросе, направлен на разбиение контента и его обработку через фильтры WordPress, но из-за особенностей регулярного выражения и обработки тегов "more", решение может работать некорректно.

Реализация

  1. Модификация функции разбора контента:

    Необходимо внимательно пересмотреть регулярное выражение и процесс фильтрации в вашей функции. WordPress использует специальные комментарии или метки для разделения контента, которые могут быть изменены плагинами, такими как qTranslate. Советую использовать <!--more--> в качестве основы для разделения:

    function split_content() {
       global $more;
       $more = false; 
       $content = explode('<!--more-->', get_the_content());
       for ($c = 0, $csize = count($content); $c < $csize; $c++) {
           $content[$c] = apply_filters('the_content', $content[$c]);
       }
       return $content;
    }

    Это простое решение может сработать лучше, если оригинальные метки не изменены плагинами.

  2. Использование шорткодов для макета:

    Если разделение невозможно через теги, хорошим вариантом станет применение пользовательских шорткодов для управления выводом. Вы можете добавить разнообразные шорткоды, как показано в предложенном решении выше:

    function register_shortcodes(){
        add_shortcode('one_third', 'yourtheme_one_third');
        // Добавьте остальные шорткоды аналогично
    }
    add_action('init', 'register_shortcodes');
  3. Настройка CSS для визуализации:

    Поддержка визуального отображения содержания в разных секциях реализуется через CSS. Здесь можно использовать сеточные или флексбоксовые технологии для адаптивного дизайна.

  4. Тестирование и отладка:

    После внедрения решений, рекомендуется провести тщательное тестирование на совместимость с различными плагинами, чтобы устранить возможные конфликты.

Таким образом, наиболее эффективный подход — это комплексный подход, включающий анализ содержимого, использование встроенных возможностей WordPress и применение шорткодов. Такой метод не только улучшит функциональность сайта, но и повысит его адаптируемость к изменениям и обновлениям.

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

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