WordPress. Как разделить контент на две колонки

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

the_content(args);

Но, что если вам нужно разделить контент на несколько блоков? Это может потребоваться, для многоколоночной темы, или, имеющей несколько разделов на одной странице. В wordpress есть функция get_the_content(), для получения контента в виде PHP-переменной, но как же определить где именно располагаются разделы?

Существуют различные решения, но все они сводятся к следующему:

  1. Разбивание контента HTML-тэгами, такими например, как заголовок h2. К сожалению, этот метод предполагает наличие минимальных знаний HTML у автора, к тому же он не очень гибкий – вам нельзя будет использовать два заголовка в одной колонке.
  2. Использование шорткода WordPress. Это более удобный способ, но все же, он накладывает определенные обязательства на редактора статьи – запоминать и правильно использовать необходимый код.

WordPress-тэг <!—more—>, может предложить гораздо лучшее решение. Обычно, он используется для разбиения длинной статьи на две части, однако не все темы используют эту возможность, к тому же, по умолчанию, он работает только для записей (не для страниц). Использование тега <—more—>, имеет ряд преимуществ:

  • кнопку “more”, которая доступна как в HTML, так и в визуальном редакторе.
  • разделы можно располагать в любом месте текста.
  • принцип действия очень простой, процесс разделения контента понятен даже не опытным пользователям.

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

[php]
// разбиваем контент тегом 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;

}
[/php]

Теперь, вам нужно найти файлы темы, содержащие вызов функции the_content(), расположенный внутри цикла. Как правило, это файлы single.php и page.php, которые используются для отображения одиночной записи и страницы. Однако, кроме этих файлов, the_content() также используется в файлах index.php, archive.php и search.php, для вывода списка записей, поэтому будьте осторжны, с внесением изменений в шаблон.

После того, как найдете нужный код, закомментируйте строку вызова функции the_content(), и вызовите функцию split_content().  Она вернет контент в виде массива,  где каждый элемент представляет собой одиночный блок контента, разделенный тегом <--more-->, $content[0], $content[1], $content[2] … и так далее. После этого, расположить блоки внутри нужной HTML-разметки не составит труда.

[php]
< ?php
// обычный вывод контента
// the_content(‘<p>Read the rest of this page »</p>’);

// разбиение контента в массив
$content = split_content();

// вывод первой секции контента в отдельной колонке
echo ‘<div id="column1">’, $content[0], ‘</div>’;

// вывод оставшейся части контента в другой колонке
echo ‘<div id="column2">’, implode(array_shift($content)), ‘</div>’;
?>
[/php]

Надеюсь, этот код будет вам полезен.

Перевод статьи “How to Split WordPress Content Into Two or More Columns“, автор Craig Buckler


Posted

in

,

by

Comments

8 responses to “WordPress. Как разделить контент на две колонки”

  1. Илья Avatar
    Илья

    И вот после нескольких таких случаев, люди потихоньку начинают понимать, что CMS – это не совсем то, что удовлетворяет их замашкам.
    Я уже писал похожий комментарий, однако, по случаю повторюсь: CMS – это не есть хорошо. По крайней мере в таких размахах, как это популярно сейчас. Каждому инструменту своё применение. И уж совсем не понятно, что делают CMS в блогах вэб-разработчиков.

  2. Mihkach Avatar
    Mihkach

    При объявлении новой функции split_content() в functions.php кодировка всего сайта почему-то становится Windows-1251. Обнаружилось в wordpress Версия 3.1.1. Я не программист, поэтому решить не смог.

  3. profit Avatar

    А как вывести записи одной конкретной рубрики в 2 колонки?

  4. grandyss Avatar

    Спасибо, очень полезно, возможно в будущем пригодится.

  5. Стас Avatar
    Стас

    Пожалуйста подскажите, возможно ли как то сделать что-то подобное? если да, то как правильно?
    […
    echo ”, $content[0], ‘ the_title() ‘;
    …]
    я не программист, но очень нужно сделать так чтобы заголовки были не вначале страницы, а там где мне нужно. может быть в вашем примере это можно как-то сделать? а то функция the_content выводит так, как в cms предусмотренно

  6. Ольга Avatar
    Ольга

    Спасибо большое за эту статью! Очень выручили.

  7. Irina Karaman Avatar

    честно!..ничего не понятно….всё как.то поотдельности…..
    как можно разделить контент на две колонны вертикальные, т.е. по ширине страницы?
    в листе CSS
    Спасибо

  8. alecsey Avatar
    alecsey

    Супер! То что искал! Спасибо!

    Есть потребность выводить на странице основную инфу и в правой колонке дополнительную. Причем без всяких плагинов, просто используя редактор (но без HTML-верстки внутри редактора).
    Как раз пришла мысль как-то разделить текст типа и выдирать вторую часть.

    Описанное здесь решение полностью решило задачу!

Leave a Reply

Your email address will not be published. Required fields are marked *