PHP стриптиз. Хаки и короткие PHP коды для WordPress

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

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

php стриптиз на блоге Белая Шляпа

Я даже картинку в Photoshop нарисовал, чтобы вы все видели как я буду такой php-стриптиз устраивать (см. изображение выше).

Начнем с шапки сайта. Нет, надо сначала оговориться, что я не вписываю никакие коды непосредственно в файлы темы – это неудобно. Тема наша не вечная, сегодня она есть, а завтра она надоела. Поэтому, все добавления и включения, которые впоследствии надо переносить в другую тему я пишу в отдельные файлы с расширением *.txt (оно может быть любым, какое вам нравится, например *.inc или *.cod) и вставляю их в файлы текущей темы с помощью стандартной php функции INCLUDE, выглядящей для WordPress примерно вот таким вот образом:

<?php include (TEMPLATEPATH . '/top-liveinternet-counter.txt'); ?>

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

Итак, какими же нестандартными функциями, хаками и шорт-кодами я пользуюсь на “Белой Шляпе” (стандартные функции WordPress я здесь описывать не буду)

Хак для WordPress  “Вывод количества последователей (followers) Twitter”

Для реализации этого хака для WordPress надо сделать два действия. Во-первых в файл function.php (в любое его место, хоть в конец, хоть в начало, только не в середину имеющихся там функций) вставить следующую функцию:

//получение количества последователей в Твиттере

function string_getInsertedString ($long_string,$short_string,$is_html=false)

{

if ($short_string>=strlen ($long_string)) return false;

$insertion_length=strlen ($long_string) -strlen ($short_string);

for ($i=0;$i<strlen ($short_string);++$i){

if ($long_string[$i]!=$short_string[$i]) break;

}

$inserted_string=substr ($long_string,$i,$insertion_length);

if ($is_html && $inserted_string[$insertion_length-1]=='<'){

$inserted_string='<'.substr ($inserted_string,0,$insertion_length-1);

}

return $inserted_string;

}

function DOMElement_getOuterHTML ($document,$element){

$html=$document->saveHTML ();

$element->parentNode->removeChild ($element);

$html2=$document->saveHTML ();

return string_getInsertedString ($html,$html2,true);

}

function getFollowers ($username){

$x = file_get_contents («http://twitter.com/».$username);

$doc = new DomDocument;

@$doc->loadHTML ($x);

$ele = $doc->getElementById ('follower_count');

$innerHTML=preg_replace ('/^<[^>]*>(.*)<[^>]*>$/',\\1

,DOMElement_getOuterHTML ($doc,$ele));

return $innerHTML;

}

//конец получение количества последователей в Твиттере

Дальше в то место, куда вы хотите поместить сведения о количестве
 ваших последователей в Твиттере вписываете следующий код:
<!-- Для вызова количества последователей в   Твиттере необходима функция в файле funktion.php--> <li><a href="http://twitter.com/eavasi" target="_blank">   <?php echo getFollowers("ВАШ_ник_в_Твиттере")."   последователей в Twitter"; ?></a>_</li> <!-- /Вызов количества последователей в Твиттере—>

Хак для WordPress “Хлебные крошки” или “Где я сейчас и как пройти на Главную?”

Я давно хотел поставить себе на блог этот скрипт, чтобы пользователи не забывали в какой категории и на какой странице они сейчас находятся, но мешало мне то, что я не знал, как он называется. Совершенно случайно на блоге у Димокса я увидел “Хлебные крошки” и не мог не поставить ее себе – это же почти что мечта моя. Хотя, надо признаться честно, “Хлебные крошки” на блоге, где посетители не уходят вглубь страниц более чем на два уровня вниз, не очень то и нужны. Они больше подходят для портала или большого сайта со сложной системой навигации. Итак, если вы решили установить “Хлебные крошки” на свой сайт или блог, надо сделать следующее:

в файл function.php вашей темы допишите в любое место, не разрывая уже имеющихся там функций, следующую функцию:

//хлебные крошки от Димокса

function dimox_breadcrumbs () {

$delimiter = '&raquo;'; //разделить между ссылками

$name = 'Главная'; //текст ссылка «Главная»

$currentBefore = '<span class="current">';

$currentAfter = '</span>';

if ( !is_home () || !is_front_page () || is_paged () ) {

echo '<div id="crumbs">';

global $post;

$home = get_bloginfo ('url');

echo '<a href="' . $home . '">' . $name . '</a> ' . $delimiter . ' ';

if ( is_category () ) {

global $wp_query;

$cat_obj = $wp_query->get_queried_object ();

$thisCat = $cat_obj->term_id;

$thisCat = get_category ($thisCat);

$parentCat = get_category ($thisCat->parent);

if ($thisCat->parent != 0) echo (get_category_parents

($parentCat, TRUE, ' ' . $delimiter . ' '));

echo $currentBefore . 'Archive by category &#39;';

single_cat_title ();

echo '&#39;' . $currentAfter;

} elseif ( is_day () ) {

echo '<a href="' . get_year_link (get_the_time ('Y')) . '">

' . get_the_time ('Y') . '</a> ' . $delimiter . ' ';

echo '<a href="' . get_month_link (get_the_time ('Y'),

get_the_time ('m')) . '">' . get_the_time ('F') .

'</a> ' . $delimiter . ' ';

echo $currentBefore . get_the_time ('d') . $currentAfter;

} elseif ( is_month () ) {

echo '<a href="' . get_year_link (get_the_time ('Y')) . '">

' . get_the_time ('Y') . '</a> ' . $delimiter . ' ';

echo $currentBefore . get_the_time ('F') . $currentAfter;

} elseif ( is_year () ) {

echo $currentBefore . get_the_time ('Y') . $currentAfter;

} elseif ( is_single () ) {

$cat = get_the_category (); $cat = $cat[0];

echo get_category_parents ($cat, TRUE, '

' . $delimiter . ' ');

echo $currentBefore;

the_title ();

echo $currentAfter;

} elseif ( is_page () && !$post->post_parent ) {

echo $currentBefore;

the_title ();

echo $currentAfter;

} elseif ( is_page () && $post->post_parent ) {

$parent_id = $post->post_parent;

$breadcrumbs = array ();

while ($parent_id) {

$page = get_page ($parent_id);

$breadcrumbs[] = '<a href="' . get_permalink ($page->ID) .

'">' . get_the_title ($page->ID) . '</a>';

$parent_id = $page->post_parent;

}

$breadcrumbs = array_reverse ($breadcrumbs);

foreach ($breadcrumbs as $crumb) echo $crumb . '

' . $delimiter . ' ';

echo $currentBefore;

the_title ();

echo $currentAfter;

} elseif ( is_search () ) {

echo $currentBefore . 'Search results for &#39;

' . get_search_query () . '&#39;' . $currentAfter;

} elseif ( is_tag () ) {

echo $currentBefore . 'Posts tagged &#39;';

single_tag_title ();

echo '&#39;' . $currentAfter;

} elseif ( is_author () ) {

global $author;

$userdata = get_userdata ($author);

echo $currentBefore . 'Articles posted by

' . $userdata->display_name . $currentAfter;

} elseif ( is_404 () ) {

echo $currentBefore . 'Error 404' . $currentAfter;

}

if ( get_query_var ('paged') ) {

if ( is_category () || is_day () || is_month ()

|| is_year () || is_search () || is_tag () || is_author () ) echo ' (';

echo __ ('Page') . ' ' . get_query_var ('paged');

if ( is_category () || is_day () || is_month ()

|| is_year () || is_search () || is_tag () || is_author () ) echo ')';

}

echo '</div>';

}

}

//конец хлебных крошек

А в то место, где вы бы хотели видеть навигацию “Хлебных крошек” поместите следующий код:

<!-- Хлебные крошки от Димокса, необходима функция в function.php-->

<?php if (function_exists ('dimox_breadcrumbs')) dimox_breadcrumbs (); ?>

<!-- /Хлебные крошки-->

Шорт-код php “Вывод возраста автора”

Для вывода возраста автора применяется универсальный php код, который может быть применен не только в WordPress, но и в любом web приложении, на любой CMS или без нее. Для того чтобы вывести возраст автора, нужно в выбранное место поместить следующий php код:

<?

$base_day = 29; // не вводить «0»

$base_mon = 6; // не вводить «0»

$base_yr = 1969; // только четырехзначный год

$current_day = date («j»);

$current_mon = date («m»);

$current_yr = date («Y»);

$base_mon_max= date («t»,mktime (0,0,0,$base_mon,$base_day,$base_yr));

$base_day_diff = $base_mon_max — $base_day;

$base_mon_diff = 12 — $base_mon — 1;

$start_day = 1;

$start_mon = 1;

$start_yr = $base_yr + 1;

$day_diff = ($current_day — $start_day) + 1; // сегодня

$mon_diff = ($current_mon — $start_mon) + 1; // этот месяц

$yr_diff = ($current_yr — $start_yr); // этот год

$day_diff = $day_diff + $base_day_diff;

$mon_diff = $mon_diff + $base_mon_diff;

if ($day_diff >= $base_mon_max) {

$day_diff = $day_diff — $base_mon_max;

$mon_diff = $mon_diff + 1;

}

if ($mon_diff >= 12)

{

$mon_diff = $mon_diff — 12;

$yr_diff = $yr_diff + 1;

}

// вывод результатов:

// $yr_diff --> лет между двумя датами

// $mon_diff --> месяцев между двумя датами

// $day_diff --> дней между двумя датами

$years = «лет»;

$days = «дней»;

if ($yr_diff == «41») $years = «год»;

if ($yr_diff == «42») $years = «года»;

if ($yr_diff == «43») $years = «года»;

if ($yr_diff == «44») $years = «года»;

if ($yr_diff == «45») $years = «лет»;

if ($yr_diff == «46») $years = «лет»;

if ($yr_diff == «47») $years = «лет»;

if ($yr_diff == «48») $years = «лет»;

if ($yr_diff == «49») $years = «лет»;

if ($yr_diff == «50») $years = «лет»;

// вывод результатов на экран

print $yr_diff." «.$years.» (29.06.1969) «;

?>

В этом коде автоматически изменяется слово “год”, в зависимости от числительного, его предворяющего.

Многие скажут, что это очень громоздкая конструкция и можно воспользоваться JavaScript кодом, чтобы все происходило на машине пользователя. Я скажу категорически: “Нет!”. На компьютере пользователя может сбита дата (из-за триальных программ, например) и тогда сведения, выдаваемые скриптом будут недостоверными, а мы этого не любим, это нас не устраивает.

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

Шорт-код php “Вывод возраста блога”

Этот код такой же как и предыдущий, с небольшой разницей в последних строках, которые отвечают за вывод переменных на экран:

<?

// задаем начальную дату

$base_day = 22; // не использовать „0“

$base_mon = 3; // не использовать „0“

$base_yr = 2009; // четырехзначный год!

$current_day = date („j“);

$current_mon = date („m“);

$current_yr = date („Y“);

$base_mon_max= date („t“,mktime (0,0,0,$base_mon,$base_day,$base_yr));

$base_day_diff = $base_mon_max — $base_day;

$base_mon_diff = 12 — $base_mon — 1;

$start_day = 1;

$start_mon = 1;

$start_yr = $base_yr + 1;

$day_diff = ($current_day — $start_day) + 1;$mon_diff = ($current_mon — $start_mon) + 1;$yr_diff = ($current_yr — $start_yr);

$day_diff = $day_diff + $base_day_diff;

$mon_diff = $mon_diff + $base_mon_diff;

if ($day_diff >= $base_mon_max)

{

$day_diff = $day_diff — $base_mon_max;

$mon_diff = $mon_diff + 1;

}

if ($mon_diff >= 12)

{

$mon_diff = $mon_diff — 12;

$yr_diff = $yr_diff + 1;

}

$years = „лет“;

$days = „дней“;

if ($yr_diff == „1“) $years = „год“;

if ($yr_diff == „2“) $years = „года“;

if ($yr_diff == „3“) $years = „года“;

if ($yr_diff == „4“) $years = „года“;

if ($day_diff == „1“) $days = „день“;

if ($day_diff == „21“) $days = „день“;

if ($day_diff == „22“) $days = „дня“;

if ($day_diff == „23“) $days = „дня“;

if ($day_diff == „24“) $days = „дня“;

if ($day_diff == „31“) $days = „день“;

if ($day_diff == „2“) $days = „дня“;

if ($day_diff == „3“) $days = „дня“;

if ($day_diff == „4“) $days = „дня“;

// вывод результатов на экран//print $yr_diff.» «.$years.», «; временно закомментированный год

print $mon_diff.» мес. и «;

print $day_diff.» ".$days;

?>

Шорт-код php “Автоматическая подстановка текущего года в Copyright”

Очень полезный код для забывчивых веб-мастеров. Обратите внимание на футер (подвал), где выводится Copyright. Там выводится период лет, с года начала блога до текущего года. Вот с помощью этого кода и подставляется текущий год. Изменяется он, как известно в праздник “Новый Год”, а 31 декабря, а, тем более, 1 января многим людям не до изменения дат на блогах, дойти бы до холодильника за остатками шампанского. Поэтому полезно использовать нижеприведенный код, который меняет текущий год автоматически. Приведу его полностью, вместе со всеми добавлениями, чтобы вам не пришлось долго мучиться, а только изменить мои данные на свои:

Copyright 2009 — <?php echo (date («Y „));?> // вывод текущего года&copy; eavasi&#8482; | Блог Евгения Васильева <a href=“/index.php»>&laquo;Белая Шляпа&raquo;</a>

Шорт-код php подстановки даты непосредственно в страницу записи “Текущая дата”

Посмотрите на страницу блогрола. Здесь в середине текста, есть фраза, выделенная красным цветом: “На [дата] минимум для попадания в блогрол…”. Там где сейчас у меня квадратные скобки стоит сегодняшняя дата. Надеюсь, никто не думает, что ежедневно в 12 часов ночи, я захожу в админку блога и изменяю дату. Конечно нет! Все делает за меня сервер под управлением установленного мною скрипта. Многие спросят: “А как установить php скрипт в тело записи на WordPress?” Очень справедливый и своевременный вопрос, ответ на него у меня готов, он здесь.

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

На <?php $curDate = date ('d.m.Y'); echo '' . $curDate; ?> минимум для попадания в Блогрол — <em>$100</em>

Код php конвертации долларов США в рубли на текущую дату

На странице “Услуги” цены на мои услуги приведены в долларах США и тут же в скобках переводятся в рубли по курсу ММВБ на текущую дату. Вы, наверное, тоже думаете, что как только закончатся торги на ММВБ, я с транзисторным радиоприемником в руках мчусь домой менять курс валют на странице услуг. Да, было бы очень смешно, если бы это было действительно так. Но все гораздо проще. На этой странице я применил php код, который считывает курсы валют на текущую дату с сайта ЦБ РФ, перемножает его на необходимое количество долларов и выводит в текст статьи. Вот этот код (привожу без изменений):

<?php

// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru

$content = get_content ();

// Разбираем содержимое, при помощи регулярных выражений

$pattern = «#<Valute ID=\»([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";

preg_match_all ($pattern, $content, $out, PREG_SET_ORDER);

$dollar = "";

$euro = "«;

foreach ($out as $cur)

{ if ($cur[2] == 840) $dollar = str_replace („,“,».",$cur[4]);

if ($cur[2] == 978) $euro = str_replace («,»,".",$cur[4]);

}

$dollar7u = $dollar*7;

$dollar3u = $dollar*3;

$dollar300u = $dollar*300;

$dollar14u = $dollar*14;

$dollar7 = sprintf («%01.0f», $dollar7u);

$dollar3 = sprintf («%01.0f», $dollar3u);

$dollar300 = sprintf («%01.0f», $dollar300u);

$dollar14 = sprintf («%01.0f», $dollar14u);

// Формируем сегодняшнюю дату

$date = date («d/m/Y»);

$dateform = date («d.m.Y»);

echo «<p>Оплата работ в интерактивном режиме почасовая: $7/час <smaller><sub><em>(„ .$dollar7.“ руб. на „.$dateform.“)</em></sub></smaller></p> <p>Для начала выполнения работ необходимо внести аванс: минимум $3 <smaller><sub><em>(„ .$dollar3.“ руб. на „.$dateform.“)</em></sub></smaller> и далее в начале каждого часа по $7 <smaller><sub><em>(„ .$dollar7.“ руб. на „.$dateform.“)</em></sub></smaller>. В начале второго часа вносится плата из расчета $14 <smaller><sub><em>(„ .$dollar14.“ руб. на „.$dateform.“)</em></sub></smaller> минус сумма первоначального аванса. В случае невозможности выполнения запрошенных работ плата за второй и последующий часы может быть возвращена заказчику за минусом комиссионных сборов за перевод платежей. Аванс, внесенный за первый час, не возвращается.</p> <p>В случае отказа от оплаты очередного часа, работа прекращается немедленно.</p> <p>Время отсчитывается по таймеру Skype (время разговора).</p><small><p>В этом разделе ведется пересчет курсов валют в реальном времени, с помощью php скрипта, на основе данных, полученных на сайте ЦБ РФ www.cbr.ru. Суммы в рублях автоматически округляются до целых чисел </p></small> <h3>3. Обычный режим выполнения заказа</h3> <p>Сумма, способ оплаты и порядок проведения объемных работ, (например, верстка персональной темы «с нуля», разработка сайта, блога, магазина, портала, социальной сети, форума, чата, галереи) определяются по отдельной договоренности с заказчиком. Как правило, оценка стоимости заказа происходит из расчета $7 <smaller><sub><em>(„ .$dollar7.“ руб. на „.$dateform.“)</em></sub></smaller> за один час. При заказе на сумму более $300 <smaller><sub><em>(„ .$dollar300.“ руб. на „.$dateform.“)</em></sub></smaller> действует скидка 13%</p>»;

function get_content ()

{

// Формируем ссылку

$link = «http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date»;

// Загружаем HTML-страницу

$fd = fopen ($link, «r»);

$text="";

if (!$fd) echo «Запрашиваемая страница не найдена»;

else

{

// Чтение содержимого файла в переменную $text

while (!feof ($fd)) $text .= fgets ($fd, 4096);

}

// Закрыть открытый файловый дескриптор

fclose ($fd);

return $text;

}

?>

Приподнимаем или приопускаем символы

Эта фишка напоследок.

Чтобы сделать вот так, как сделано дальше на этом примере:

Yn = X2

надо применить соответственно следующие теги <sub></sub> – для нижнего индекса и <sup></sup> – для верхнего

    1. eavasi Автор записи

      @Александр Кривой, это приятно слышать. Ставь еще какой нибудь фич.

      Жду в скайпе, Саш.

  1. Надежда

    Какой молодец!!! Завидую белой завистью. Для меня это «китайская грамота» Замечательно, что в интернете есть такие замечательные люди, которые делятся знаниями.

    1. eavasi

      @Надежда, спасибо.

      А вам каким-то хаком удалось воспользоваться?

      Заходите почаще, в любом случае, всегда Вам рад!!!

  2. Надежда

    Какой молодец!!! Завидую белой завистью. Для меня это «китайская грамота» Замечательно, что в интернете есть такие замечательные люди, которые делятся знаниями.

    1. eavasi Автор записи

      @Надежда, спасибо.

      А вам каким-то хаком удалось воспользоваться?

      Заходите почаще, в любом случае, всегда Вам рад!!!

  3. Денис

    Здравствуйте! Захотел установить для сайта скрипт его возраста и тут мне выдает ошибку. Вот здесь: $base_day_diff = $base_mon_max — $base_day;

    1. eavasi Автор записи

      Вот и славно. Я уж подумал, что мы сейчас с вами начнем долгую переписку по этой ошибке.

      А дело все было в кавычке.

      Удачи вам. С Новым Годом.

      Кстати, почитайте еще как можно вывести возраст блога картинками, как сделано у меня в футере. Эта статейка вот здесь: www.eavasi.ru/php-results-in-pictures/

  4. Satori

    Спасибо, пригодился код возраста сайта, он оказался простым, что я очень люблю. Зато найти его было непросто 🙂 Такой простой, что аж обидно, что сама не додумалась 🙂

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

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.