Возвращение на Upwork или как я выполнял свой первый заказ после перерыва
27 апреля после долгого перерыва на сервисе Upwork, я решил возобновить свою деятельность на этой площадке. Тут же я увидел довольно интересный заказ, чтобы поднять свой рейтинг. Советую для тех, кто хочет быстренько поднять рейтинг выполнять мелкие заказы.
Так как я являюсь Wordpress экспертом, то искал я задачи именно по этому направлению. И я наткнулся на очень интересное задание, которое было озаглавлено как "Regex and Wordpress guru is required". Заказчик имел хорошую репутацию, поэтому я решил написать ему с просьбой пообщаться со мной, т.к. мне нужно поднимать рейтинг.
Задача
Есть две конструкции:
<h2>Заголовок</h2>
и
<div class="word-wrapper"><p>#1</p></div>
<h2>Заголовок</h2>
Необходимо было перед этими блоками вывести дисклеймер, который являлся полем плагина ACF. Собственно основная проблема была в том, чтобы при работе нашего алгоритма дисклеймер во втором варианте кода должен выводиться перед всей конструкцией.
Решение задачи
С самого начала определим фильтр для Wordpress, который будет работать с контентом до его вывода:
add_filter( 'the_content', 'filter_the_content, 1 );
Будем использовать именно реализацию этим методом, потому что это единственный правильный способ вставить изменения в контент Wordpress до начала обработки этого контента на шорткоды и другие скрипты.
После этого определим функцию:
function filter_the_content( $content ) { }
Далее заменим все вхождения строк <h2>
на конструкцию [mystyle_div]<h2>
. Делается это следующим образом:
$content = preg_replace('/<h2/mu', '[mystyle_div]<h2', $content);
В базе данных Wordpress конструкция <div class="word-wrapper"><p>#1</p></div>
представляла собой шорткод [word str="#1"]
, поэтому заменять мы будем её. Наша следующая задача заменить конструкцию [word str="#1"][mystyle_div]<h2>
на [word str="#1"]<h2>
.
Так как других конструкций с шорткодами не планируется, то достаточно заменить участок "][mystyle_div]<h2>
на "]<h2>
. Если бы были другие похожие конструкции, то я бы заменил участки типа [word str="#1"][mystyle_div]
на [word str="#1"][mystyle_div][/mystyle_div]
, а потом удалил бы конструкцию [mystyle_div][/mystyle_div]
. Кода в любом случае немного:
$content = preg_replace('/"\]\s\s\[mystyle_div\]<h2/mu', '"]<h2', $content);
$content = preg_replace('/\[word str=".*?"\]<h2/mu', '<div class="mystyle"'.$text.'</div>$0', $content);
Здесь я использовал проверку после посимвольного разбора строки $content
. Средствами Wordpress после шорткода [word]
вставлялось некоторое число переносов строки, поэтому регулярное выражение выглядит так.
Далее просто заменяем оставшиеся [mystyle_div]
на вхождение <div class="mystyle"'.$text.'</div>
.
Задача была выполнена за час и было заработано 16$. Заказчик с удовольствием подтвердил выполненную задачу.
Я напоминаю, что давно работаю на фрилансе и имею опыт на площадках Youdo, Upwork, Profi и других. Принимаю заказы на платную консультацию по ведению данных площадок. Пишите на почту office@veliyev.ru.