Фильтр для изменения заголовка публикации после загрузки изображения?
Когда я загружаю изображения, Wordpress 3.4.2 устанавливает заголовок в основу имени файла, например "DSCN1234" или "IMG_1234". Я бы хотел, чтобы заголовок был оставлен пустым.
Код, который задает заголовок во время загрузки, кажется, находится в "wp-admin/includes/media.php "в функции media_handle_upload()
, здесь:
// Construct the attachment array
$attachment = array_merge( array(
'post_mime_type' => $type,
'guid' => $url,
'post_parent' => $post_id,
'post_title' => $title,
'post_content' => $content,
), $post_data );
Если я просто изменю его на 'post_title' => "",
, это исправит его, но я понимаю, что основной код не следует изменять.
Есть ли фильтр, который я могу использовать для изменения Заголовок после того, как он был установлен обработчиком загрузки? Я пробовал wp_handle_upload
и wp_handle_upload_prefilter
, но они не дают мне доступа к данным post_title
.
Фильтр attachment_fields_to_edit
действительно дает мне доступ к post_title
, но он срабатывает для каждого изображения при редактировании галереи - я просто хочу изменить post_title
одного изображения сразу после его загрузки. (если пользователь после этого вручную установит Название имени файла, я не хочу его удалять.) Есть еще идеи?
ОБНОВЛЕНИЕ: ну, я только что обнаружил, что post_title
возвращается к имени файла при каждом обновлении галереи (повторная сортировка изображений и т. Д.), И даже если я использую фильтр attachment_fields_to_edit
для очистки post_title
, он не остается очищенным, потому что, когда я нажимаю Сохранить изменения, что-то, по-видимому, не нравится тот факт, что я установил поле заголовка пустым, хотя это обязательное поле (красная звездочка рядом с ним). Другие идеи приветствуются.
Спасибо!
Рассел
3 answers
(Отвечая на мой собственный вопрос, с помощью @brasofilo)
В Wordpress 3.5 появился отличный новый медиа-менеджер, и он больше не требует заполнения заголовка для изображений. Он также больше не заполняет заголовок автоматически при реорганизации изображений в галерее. Однако он по-прежнему заполняет заголовок именем файла изображения при загрузке изображения, например "DSCN1234". Но это можно предотвратить, добавив следующий код в файл functions.php
в вашем тема:
add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
function wpse_70093_modify_uploaded_file_title( $attachment_ID )
{
$the_post = array();
$the_post['ID'] = $attachment_ID;
$the_post['post_title'] = '';
wp_update_post( $the_post );
}
После загрузки изображения заголовок будет пустым, и он останется таким, если вы специально не установите для него какое-либо значение - даже если изображение отредактировано в Wordpress.
Есть плагин, который вы могли бы использовать для этой цели http://wordpress.org/extend/plugins/img-title-removal / этот плагин вообще скроет заголовок (не уверен, что это то, чего вы хотите достичь?)
Что можно сделать, так это установить заголовок всех загрузок на "Без названия".
Затем отфильтруйте the_title
и верните пустую строку, если заголовок вложения соответствует значению по умолчанию.
Основная идея заключается в следующем:
add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
add_filter( 'the_title', 'wpse_70093_display_untitled', 10, 2 );
function wpse_70093_modify_uploaded_file_title( $attachment_ID )
{
$the_post = array();
$the_post['ID'] = $attachment_ID;
$the_post['post_title'] = 'Untitled';
wp_update_post( $the_post );
}
function wpse_70093_display_untitled( $title, $id )
{
if( 'attachment' != get_post_type( $id ) )
return $title;
if( is_admin() )
return $title;
if( !is_admin() && 'Untitled' == $title )
return '';
return $title;
}
[ обновление]
Мне не хватало внешнего подхода. Фильтрация the_title
работает только для страницы attachment.php
.
Изображения, вставленные через редактор, должны быть отфильтрованы с помощью:
add_filter('image_send_to_editor', 'wpse_53577_img_wrapper', 20, 8);
function wpse_53577_img_wrapper($html, $id, $caption, $title, $align, $url, $size, $alt)
{
/* Manipulate $html result */
return $html;
}
Шорткод [gallery]
необходимо перестроить с помощью post_gallery
.
Другие случаи должны рассматриваться индивидуально.