Июль
25
2011

Сторонние хуки в WordPress

Сторонние хуки в WordPress

Ранее я рассказывал как пользоваться хуками в WordPress. Стандартные зацепки документированы в кодексе, но каждый разработчик может добавить собственные вызовы в свои плагины или темы. К сожалению не все разработчики документируют хуки и приходится лезть в код. Я расскажу о поиске зацепок на примере плагина NEXTGen Gallery.

apply_filter и do_action

Это две функции, которые исполняют хуки. Можно как создать свой собственный хук, так и вызвать исполнение стандартного.

<?php
$value = apply_filter ('название',$value,$arg2,$arg3,...);
do_action('название',$arg1,$ar2,...);
?>

Использование обоих очень похоже.

Первый аргумент (название) идентифицирует хук, именно его нужно использовать, в функциях add_filter, add_action. Самое главное не перепутать где вы вызываете фильтры, а где действия.

$value это данные, которые фильтрует функция. Функция фильтра должна возвращать данные того же типа, что и $value. Функция действия не должна ничего возвращать.

Остальные переменные служат для передачи данных в функцию. При вызове add_filter или  add_action их количество указывается в 4-м аргументе.

Если в тексте плагина есть вызов функций add_filter или  add_action, то можно написать зацепится за него.

Пример

Итак, обещанный пример. Захотелось мне, чтоб картинки в постах загружались не из папки wp-content/gallery, а с отдельного хоста g.tigor.org.ua. Теоретически это позволяет ускорить загрузку страниц и в будущем перенести картинки на другой хостинг (ну мало ли).

Итак начинаем ковырять NEXT Gen Gallery.

Поиск показывает, что все вызовы хуков находятся в файле nggfunctions.php

Открываем и начинаем просмотр всех хуков. Я выбрал этот кусок:

&nbsp;
// add more variables for render output
$picture-&gt;imageURL = ( empty($link) ) ? $picture-&gt;imageURL : $link;
$picture-&gt;href_link = $picture-&gt;get_href_link();
$picture-&gt;alttext = html_entity_decode( stripslashes(nggGallery::i18n($picture-&gt;alttext, 'pic_' . $picture-&gt;pid . '_alttext')) );
$picture-&gt;linktitle = htmlspecialchars( stripslashes(nggGallery::i18n($picture-&gt;description, 'pic_' . $picture-&gt;pid . '_description')) );
$picture-&gt;description = html_entity_decode( stripslashes(nggGallery::i18n($picture-&gt;description, 'pic_' . $picture-&gt;pid . '_description')) );
$picture-&gt;classname = 'ngg-singlepic'. $float;
$picture-&gt;thumbcode = $picture-&gt;get_thumbcode( 'singlepic' . $imageID);
$picture-&gt;height = (int) $height;
$picture-&gt;width = (int) $width;
$picture-&gt;caption = nggGallery::i18n($caption);
// filter to add custom content for the output
$picture = apply_filters('ngg_image_object', $picture, $imageID);
&nbsp;

Теперь нужно создать функцию фильтр.

function ngg_use_g($image,$imageID){
$image-&gt;thumbnailURL = str_replace('tigor.org.ua/wp-content/gallery','g.tigor.org.ua', $image-&gt;thumbnailURL);
$image-&gt;imageURL = str_replace('tigor.org.ua/wp-content/gallery','g.tigor.org.ua', $image-&gt;imageURL);
return $image;
}
add_filter('ngg_image_object','ngg_use_g', 10,2);

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

Надеюсь эта затея с подменой пути картиноками принесет результаты и будет что рассказать о ней.

Неправильная раскладка: cnjhjyybt [erb d цщквзкуыы

Понравилась статья? Посоветуйте друзьям!

PHP Tutorial WordPress WP Plugin


Понравилась статья? Подпишись на рассылку по E-Mail или в RSS.
  • Все-таки не очень понял - а зачем переносить картинки?
  • У браузеров есть такой параметр, как количество соединений на хост. У приличных браузеров оно колеблется в районе 5-7. Если вынести картинки на отдельный хост, то браузер сможет грузить практически в 2 раза больше информации одновременно. Это в теории, как будет на практике нужно смотреть.
  • блин интересная статья сохраню себе, но ничего не понял ) у меня у друга на джумле проблема с местом и еще другие хостинги не любят когда из их сайтов хранилище устраивают