web-dev-qa-db-ja.com

画像のアップロード後にpost_titleを修正するためにフィルタをかけますか?

私が画像をアップロードするとき、Wordpress 3.4.2はタイトルを "DSCN1234"や "IMG_1234"のようなファイル名のベースに設定します。タイトルを空白のままにしてください。

アップロード中にタイトルを設定するコードは、関数media_handle_upload()の "wp-admin/includes/media.php"にあります。

__コード__

// 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_titleattachment_fields_to_editへのアクセスを私に与えますが、ギャラリーを編集するときそれはあらゆる画像のために起動されます - 私はちょうどそれがアップロードされた直後に単一の画像のpost_titleを修正したいです。 (その後、ユーザーが手動でタイトルをファイル名に設定した場合、それを削除したくはありません。)その他のアイデアはありますか?


UPDATE:そうですね、ギャラリーが更新されるたびにpost_titleがファイル名に戻ります(画像の並べ替えなど)。そしてpost_titleフィルターを使用してattachment_fields_to_editをクリアしても、post_titleは消えません。 [変更を保存]をクリックしたときに、[タイトル]フィールドが必須フィールドであるにもかかわらず空になるように設定しているという事実が気に入らないことが明らかになっています(その隣の赤いアスタリスク)。他のアイデアは大歓迎です。

ありがとうございます。
ラッセル

2
Russell G

(@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
Russell G

できることはすべてのアップロードのタイトルを「無題」に設定することです。

その後、the_titleをフィルタリングし、attachentのタイトルがデフォルトと一致する場合は空の文字列を返します。

基本的な考え方は、

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
brasofilo

この目的のために使用できるプラグインがあります http://wordpress.org/extend/plugins/img-title-removal/ このプラグインは非表示にしますまったくのタイトル(これがあなたが達成したいものであるかどうかわからない?)

0
mirage