web-dev-qa-db-ja.com

WordPressで画像をアップロードしている間の画像タイトル、キャプション、代替テキスト、説明の自動追加

私のWordPress投稿に任意の画像をアップロードしながら、タイトル、キャプション、代替テキスト、説明に同じ画像タイトルを自動入力/追加する方法を誰かに教えてもらえますか。

desired screenshot

7
On Secret Hunt

あなたはwp-includes/post.phpの3332行目から 'add_attachment'アクションにフックすることができます。 (Version 4.4) post_idを渡し、そこからファイル名を取得して必要なもので投稿メタを更新できます。

からの参照

add_action( 'add_attachment', 'wpse_125805_add_image_meta_data' );

function wpse_125805_add_image_meta_data( $attachment_ID ) {

    $filename   =   $_REQUEST['name']; // or get_post by ID
    $withoutExt =   preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename);
    $withoutExt =   str_replace(array('-','_'), ' ', $withoutExt);

    $my_post = array(
        'ID'           => $attachment_ID,
        'post_excerpt' => $withoutExt,  // caption
        'post_content' => $withoutExt,  // description
    );
    wp_update_post( $my_post );

    // update alt text for post
    update_post_meta($attachment_ID, '_wp_attachment_image_alt', $withoutExt );
}
2
Webloper

added_post_metaは新しい画像に引っ掛かる良い時期のようです。デフォルトのメタがすでに設定されているだけでなく、この関数は添付ファイルのメタデータを保持する$post_idとともに$meta_valueを与えます。そこからあなたはすべてのフィールドを取得し、あなたが望むものを設定することができます。

add_action('added_post_meta', 'wpse_20151219_after_post_meta', 10, 4);

function wpse_20151219_after_post_meta($meta_id, $post_id, $meta_key, $meta_value) {

    // _wp_attachment_metadata added
    if($meta_key === '_wp_attachment_metadata') {

        // ----------------------------------------------------------------------
        // POST
        // ----------------------------------------------------------------------

        // Change basic fields on attachment post
        wp_update_post(array(
                           'ID'           => $post_id,
                           'post_title'   => "This is a TITLE for $post_id",
                           'post_content' => "This is the DESCRIPTION for $post_id",
                           'post_excerpt' => "This is the CAPTION for $post_id",
                       ));

        // ----------------------------------------------------------------------
        // POST META
        // ----------------------------------------------------------------------

        // Change ALT Text
        update_post_meta($post_id, '_wp_attachment_image_alt', "This is the ALT Text for $post_id");

        // Add Custom Field
        update_post_meta($post_id, '_wpse_20121219_my_custom_meta', 'MyCustomMetaValue');

        // ----------------------------------------------------------------------
        // POST META ( ATTACHMENT METADATA )
        // ----------------------------------------------------------------------

        // Change Image Metadata
        $meta_value[ 'image_meta' ] = array_merge($meta_value[ 'image_meta' ], array(
            'credit'    => 'https://black-buddha.com',
            'camera'    => 'The Best Camera EVER!',
            'copyright' => date('Y'),
            'title'     => "This is a META TITLE for $post_id",
            'caption'   => "This is a META CAPTION for $post_id",
        ));

        // Update The Image Metadata
        wp_update_attachment_metadata($post_id, $meta_value);

        // _wp_attached_file
        // _wp_attachment_metadata (serialized)
        // _wp_attachment_image_alt
        // _wpse_20121219_my_custom_meta

        $attachment_meta = get_post_meta($post_id);

        // width
        // height
        // file
        // sizes
        // image_meta
        //      aperture
        //      credit
        //      camera
        //      caption
        //      created_timestamp
        //      copyright
        //      focal_length
        //      iso
        //      shutter_speed
        //      title
        //      orientation
        //      title
        //      keywords

        $attachment_metadata = wp_get_attachment_metadata($post_id);
    }
}
2
jgraup

もっと簡単な解決策としては、 this 私がしばらく前に作った/ WordPressプラグインを使うことができます。

このプラグインには、メディアライブラリ内に既に存在する画像の画像属性を更新する一括更新機能も付属しています。

1
Arun Basil Lal