Эх, наврал я :). Не будет статьи про шорткоды и погоду. Проблема оказалась в том, что с момента разработки мной этого шорткода прошло не мало времени. И способ определения города на сайте погоды изменился. Из-за чего, непонятно как можно получить ID нужного города чтобы потом передать его в шорткод и отобразить информер погоды. А без этого как вы понимаете, разработка не имеет смысла.
Уверен, что вы неоднократно встречали на блогах WordPress рекламные объявления AdSense или им подобные. Вот как именно это делается я и опишу в этой статье. По крайней мере так, как бы это сделал я.
И первое что нам будет нужно — это в корне сайта создать каталог, в котором будут храниться файлы с нашими объявлениями (в будущем, объявления будут хранится в базе данных). Назовем этот каталог "adv", и разместим в нем пару файлов с понятными для нас названиями — 200x200.txt, 180x150.txt, 125x125.txt, и т.п. Названия этих файлов должны быть эквивалентны размерам блоков объявлений. При вставке таких объявлений в статью, нам будет понятнее какого размера объявление мы разместим. Чем вставка объявления с кодом или ID «3», «7» или «22». В общем, это делается только ради удобства и наглядности.
Второе что нужно — это создать шорткод (где и как хранятся шорктоды описано здесь), позволяющий считывать содержимое файла и отображать его в нужном месте статьи. За это отвечает следующий код:
function wp2fl_adv($atts, $content = null) { //Sets $atts = shortcode_atts(array( 'id' => '', 'align' => '', ),$atts); //Filter $id = trim($atts['id']); //Check format if(preg_match('/^d+xd+$/i', $id) == FALSE) { return ""; } $file = ABSPATH.'adv/'.$id.'.txt'; if(is_file($file) == TRUE) { $c = file_get_contents($file); } else { return ""; } switch ($atts['align']) { case 'center': preg_match('/^(d+)xd+$/i', $id, $a); $c = '<div style="width:'.$a[1].'px; margin:10px auto;">'.$c.'</div>'; break; case 'left': $c = '<div style="float:left; margin:10px 10px 10px 0;">'.$c.'</div>'; break; case 'right': $c = '<div style="float:right; margin:10px 0 10px 10px;">'.$c.'</div>'; break; } return $c; } add_shortcode("adv", "wp2fl_adv");
Разберем его подробнее:
//Sets $atts = shortcode_atts(array( 'id' => '', 'align' => '', ),$atts);
устанавливаем данные атрибутов по умолчанию. Кроме ID объявления, будем указывать еще и место расположение — по центру или слева, справа с обтеканием.
//Filter $id = trim($atts['id']);
фильтруем, удаляя лишние пробелы в начале или конце параметра ID. Это делается если Вы решите указать следующий шорткод:
[adv id="200x200 "]
//Check format if(preg_match('/^d+xd+$/i', $id) == FALSE) { return ""; }
чтобы не было ошибок, используя регулярное выражение проверяем формат параметра ID. Он должен быть следующим — числа, английская буква «x», опять числа. Пример: 200x200, 180x150, 125x125.
$file = ABSPATH.'adv/'.$id.'.txt'; if(is_file($file) == TRUE) { $c = file_get_contents($file); } else { return ""; }
если файл с указанным ID существует — считываем его содержимое.
switch ($atts['align']) { case 'center': preg_match('/^(d+)xd+$/i', $id, $a); $c = '<div style="width:'.$a[1].'px; margin:10px auto;">'.$c.'</div>'; break; case 'left': $c = '<div style="float:left; margin:10px 10px 10px 0;">'.$c.'</div>'; break; case 'right': $c = '<div style="float:right; margin:10px 0 10px 10px;">'.$c.'</div>'; break; }
а здесь, в зависимости от позиции — размещаем файл с нужной стороны, применяя нужные стили.
Чтобы использовать данный шорткод, введите в тексте статьи (я это делаю обычно в начале абзаца), следующий код:
[adv id="200x200" align="left"]
сохраните, и проверьте результат просмотрев соответствующую страницу. У меня это выглядело так:
Не знал об этом способе, буду пробовать. Спасибо за пост!!
Пожалуйста, Богдан!
Одна из следующих статей будет посвящена плагину позволяющему создавать такие объявления через админку. А выводить через шорткод.
С нетерпением жду.
Павел, добрый день. Хорошая статья, код расписан понятно. Только я бы ещё добавил, как вставлять функцию и куда её вставлять. Многие новички не знают, как вставлять коды в функции темы и тем более в каком месте.
Здравствуйте!
В следующих статьях постараюсь учесть.
Павел, посетители это оценят 😉 Удачи!
Спасибо! Вам так же успехов 🙂
А вообще я думал создать отдельную статью по этому поводу, и давать ссылку на нее. Т.к. дублировать одно и то же в каждой статье не вижу смысла.