Элементарная замена кода в записи на WordPress

24 Апреля 2011 // Wordpress

У меня на блоге есть слайдер изображений. Допустим, как вот тут. Что бы его поставить, мне нужно каждый раз писать код:

1
2
3
4
<ul class="slide">
	<li><img src="..."/></li>
	...
</ul>

Лично мне не особо лениво вписывать этот код каждый раз, да и он не настолько большой, чтобы прятать его в более маленький, но вот недавно мне заказали сделать такой же слайдер, и со знанием html-кода у заказчиков довольно туго. Я решил заменить html-код на bb-код.

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

Можно, конечно, все время добавлять кое-какой код в файлы темы, но это совсем не удобно.

Начинаем

1. Создаем в папке с темой файл replace.php. Добавляем в него следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
// Помещаем весь контент в переменную (как строку, разумеется). 
// Тут важно заметить, что используем функцию get_the_content(), а не просто the_content(). В случае со второй 
// у нас ничего не получится, текст будет выводится независимо от наших манипуляций, а нам этого не надо.
$content = get_the_content('Читать далее');
 
// То, на что заменяем, помещаем в массив. Можете сделать это и через $search = array(...), 
// но лично мне приятней именно так, как ниже.
$search[0] = "/\[photo\]/i";
$search[1] = "/\[li\]/i";
$search[2] = "/\[\/li\]/i";
$search[3] = "/\[\/photo\]/i";
 
// То, что заменяем на $search[]. Обратите внимания на индексы, на самом деле в данном случае нет разницы, 
// соответствуют ли индексы из $search индексам из $replace. Обработка идет в порядке написания. 
// Т.е. $search[0] сопоставляется $replace[3]. Если задать сортировку, то $search[0] будет сопоставляться $replace[0]
$replace[3] = "<ul class=\"slide\">";
$replace[2] = "<li>";
$replace[1] = "</li>";
$replace[0] = "</ul>";
echo preg_replace($search, $replace, $content);
?>

Редактируем файлы темы

Редактируем все файлы, содержащие the_content(), такие как index.php, single.php и т.д. Код ниже:

1
<?php the_content(); ?>

заменяем на:

1
<?php include(TEMPLATEPATH . '/replace.php'); ?>

Теперь у нас в каждый файл, в который мы вставили include, будет транслироваться файл replace.php

Конец

Всё. Можно писать записи типа:

1
2
3
4
[photo]
	[li]<img src="..." />[/li]
	...
[/photo]

Советую

Обязательно прочитайте про функцию preg_replace и вообще про работу со строками. Хотя, сайт про строки мне абсолютно ничем не помог.

Информация

Я решил оставить старые комментарии. Признаюсь, они нравятся мне больше, но ведь нужно заботиться о читателях. Откомментировать «по-старому» через e-mail или twitter можно пролистав скролл вниз. Приятных дней.

Старый формат комментариев

Комментариев нет. (К.О.)

Или можешь набрать вручную: