Удаление атрибута title из изображений
Я ищу способ удалить атрибут title из изображений, предпочтительно используя хук или фильтр.
Большинство клиентов не утруждают себя указанием правильного заголовка для изображений, что сводит на нет цель этого атрибута. Я предпочитаю отсутствие всплывающих подсказок случайным, неинформативным подсказкам.
Я бы категорически не рекомендовал этого делать. Более правильным и устойчивым решением будет объяснить клиентам ценность атрибута title и научить их правильно его использовать.
Простое удаление атрибута — это лишь временное решение симптома, но не борьба с причиной проблемы.
Однако, если вы всё же хотите удалить этот атрибут, есть несколько способов:
Использовать фильтр контента
Контент записи проходит через фильтр перед отображением на экране. Этот фильтр выполняет несколько задач: преобразует кавычки в «ёлочки», делает заглавной букву P в WordPress и т.д. Он также обрабатывает шорткоды, присутствующие в контенте.
Вы можете пропустить контент через фильтр, который использует регулярные выражения для поиска тегов <img /> и удаления атрибута title.
Использовать плагин
Быстрый поиск в репозитории плагинов выдал Img Title Removal — плагин, который, по заявлению, делает именно то, что вам нужно. Взглянув на код, можно увидеть, что он реализует первый вариант:
<?php
/*
Plugin Name: Img Title Removal
Plugin URI: http://www.glauserconsulting.com/2008/11/nu-agency/
Description: Плагин-фильтр, удаляющий все атрибуты title у изображений в записях.
Author: Ivan Glauser
Version: 0.2.1
Author URI: http://www.glauserconsulting.com
*/
add_filter('the_content', 'remove_img_titles');
function remove_img_titles($text) {
// Получаем все title="..." из HTML.
$result = array();
preg_match_all('|title="[^"]*"|U', $text, $result);
// Заменяем все вхождения пустой строкой.
foreach($result[0] as $img_tag) {
$text = str_replace($img_tag, '', $text);
}
return $text;
}
?>
Использовать JavaScript
Третий вариант — динамически удалять атрибуты title после их отображения на странице. Если вам обязательно нужно их удалить, я рекомендую именно этот способ, потому что title останется в HTML-коде (для скринридеров), но будет удалён при загрузке документа, что позволит избежать "случайных, неописательных" подсказок.
Используя jQuery, вы можете выбрать все элементы <img /> на странице, имеющие атрибут title, и удалить его. Пример:
jQuery(document).ready(function($) {
$('img[title]').each(function() { $(this).removeAttr('title'); });
});
Скринридеры используют атрибут alt. Атрибут title никогда не должен быть инструментом доступности.
fuxia
Это было отмечено для внимания модератора с аналогичным мнением, как у toscho выше, и парой ссылок http://www.456bereastreet.com/archive/200412/the_alt_and_title_attributes/ http://www.rnib.org.uk/professionals/webaccessibility/wacblog/Lists/Posts/Post.aspx?id=38 возможно стоит пересмотреть?..
Rarst
Странно, что я не вижу флаги на своих материалах, пока не зайду в свой профиль... исправлено.
EAMann
Вот решение без использования JavaScript, не требующее изменения ядра. Попробуйте добавить этот код в файл function.php вашей темы.
add_filter( 'wp_get_attachment_image_attributes', 'remove_image_text' );
function remove_image_text( $attr ) {
unset( $attr['alt'] );
unset( $attr['title']) ;
return $attr;
}
Если вам нужно оставить поле заголовка <input> пустым и не заполнять его автоматически именем файла при загрузке изображения, вот способ:
Перейдите в wp-admin/includes/media.php
Строка 911: <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br />
Измените её на: <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='' /><br />
У меня также много клиентов, которым это не важно.
Я бы не изменял основной файл, так как это приведёт к проблемам при обновлении WordPress. По возможности, лучше использовать хук.
Jan Fabry
Не могу не подчеркнуть: не взламывайте ядро!!! ... http://wordpress.stackexchange.com/questions/1639/what-are-some-reasons-why-you-should-not-hack-wordpress-core-files
EAMann
Согласен, НИКОГДА НЕ ВЗЛАМЫВАЙТЕ ЯДРО именно поэтому они предоставляют фильтры. Если вы не можете добавить фильтр или действие, тогда что ж, найдите другой путь. НО НИКОГДА НЕ ВЗЛАМЫВАЙТЕ ЯДРО!!!!
xLRDxREVENGEx