Фильтр для изменения заголовка публикации после загрузки изображения?


Когда я загружаю изображения, 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, он не остается очищенным, потому что, когда я нажимаю Сохранить изменения, что-то, по-видимому, не нравится тот факт, что я установил поле заголовка пустым, хотя это обязательное поле (красная звездочка рядом с ним). Другие идеи приветствуются.

Спасибо!
Рассел

Author: Russell G, 2012-10-22

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.

 4
Author: Russell G, 2012-12-12 14:04:41

Есть плагин, который вы могли бы использовать для этой цели http://wordpress.org/extend/plugins/img-title-removal / этот плагин вообще скроет заголовок (не уверен, что это то, чего вы хотите достичь?)

 0
Author: mirage, 2012-10-22 16:26:38

Что можно сделать, так это установить заголовок всех загрузок на "Без названия".

Затем отфильтруйте 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.

Другие случаи должны рассматриваться индивидуально.

 0
Author: brasofilo, 2017-04-13 12:37:35