サポート » 使い方全般 » メディアライブラリの画像ファイル名から、タイトルか代替テキストを取

  • すみません、メディアライブラリに画像ファイルを登録した後、登録したタイトルや代替テキストを画像ファイル名から取得するには、どうしたらよいのでしょうか。

    投稿記事の中で、各記事決まった数の画像を使う予定です。
    投稿記事の入力画面で画像を選ぶのではなく、画像のファイル名の命名ルールを作って、メディアライブラリに直接アップロードしたいと思っています。その際、タイトルや代替テキストは必ず登録するようにします。

    現在、画像ファイル名から画像URLを取得して、画像を表示することはできるのですが、alt属性に入れるテキストをどうやって取得させればよいかわからずにいます。

    どうしたらよいか教えて頂けないでしょうか。
    よろしくお願い致します。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • alt属性にはいつも画像のタイトルを使っていましたが、
    タイトルとは別に代替テキストも設定できるのですね。
    気になって調べてみました。

    とりあえず get_post_meta()で取得できたのですけど、
    もうちょっといい方法があったら私も知りたいです。

    $attachments = get_children(array('post_parent' => $id, 'post_type' => 'attachment', 'post_mime_type' => 'image'));
       if (is_array($attachments) ){
    	foreach($attachments as $attachment){
    		$title= $attachment->post_title; // タイトル
    		$alt = get_post_meta($attachment->ID , "_wp_attachment_image_alt", true); // 代替テキスト
    	}
    }
    トピック投稿者 webarton

    (@webarton)

    sysbirdさん、ありがとうございます!
    実はポストして頂いてすぐに、書いてくださった書き方で試してみたのですが
    うまく表示できなかったので、ちゃんとできてから返信しようと思って遅くなりました。
    すみません。

    うまくできなかったのは、私がメディアライブラリに登録している画像は、投稿記事の中で選択していないからなのか、post_nameに0が入っていて、

    1.post_nameの画像名を取得する(1枚目にはxxx_1,2枚目にはxxx_2という名前がついていて、xxxは投稿記事の入力画面のカスタムフィールドで入力する値と同一)
    2.post_typeはattachment
    3.post_mime_typeはimage/jpeg

    この3つでget_childrenを取得すればよいのだと思ったので、はじめはpost_nameを固定値で
    $attachments = get_children(array('post_name' => 'xxx_1', 'post_type' => 'attachment', 'post_mime_type' => 'image/jpeg'));

    としてみました。でも取得できる値はひとつのはずだったのですが、’post_name’ => ‘xxx_1’が無視されて、’post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image/jpeg’だけを満たした値が取れてしまって、理由がわからずまだ未解決です。

    それで、書いてくださったget_post_meta()の部分まで行き着いていないのですが
    早く解決させて表示できるようにしたいと思っています。

    他に解決しなければいけないことができてしまったので、
    まずはそちらを片付けてからになってしまうため、今の段階で返信させて頂きました。

    なんだかつまずいてばっかりで情けないです。
    ありがとうございます。

    それは、記事やページの投稿ではなくメディアのアップロードでアップロードしたからではないでしょうか?
    記事に紐付けられていないから、記事からは探せないでしょう。

    ごめんなさい、質問をよく読んでませんでした。
    記事に紐付けられていない画像を、ファイル名から探すのはちょっと難しいですね。
    ファイル名はアップロード時に変わることがあります。

    画像のタイトルに命名規則を設けるなど工夫が必要かもしれません。
    画像のタイトルからなら、’post_title’ => ‘xxx_1’で探せるでしょうか?

    トピック投稿者 webarton

    (@webarton)

    kvexさん、sysbirdさん、ありがとうございます。書き方が悪くってほんとにすみません。

    おっしゃるとおり、「記事投稿画面で設定した画像ファイル名」に紐づく画像の、タイトルか代替テキストを表示できればと思っています。

    メディアライブラリの「タイトル」= post_title ←これを取得したいので、
    記事投稿画面で画像ファイル名を「xxx」と設定し、

    1.post_nameに「xxx_1」という画像ファイル名が入っているので、「xxx_1」の「xxx」だけを取り出して紐付ける
    2.post_typeはattachment
    3.post_mime_typeはimage/jpeg

    としたいのですが、
    ・「xxx_1」の「xxx」だけを取り出す、をまだ調べていない←後で調べます!
    ・まずは固定値’post_name’ => ‘xxx_1’で取得できるか確認しようとしたが、’post_name’ => ‘xxx_1’が無視されて、’post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image/jpeg’だけを満たした値が取れてしまう

    という状態です。

    そもそもとして・・・
    get_children のパラメータに
    ‘post_name’
    なんてありましたっけ?

    トピック投稿者 webarton

    (@webarton)

    kvexさん、色々すみません。

    ぐっ、そういうことですね・・・
    すみません。顔洗って出直してきます。

    今調べてやってみたいのですが、しばらく作業できそうに無いので、
    間が空いてしまいますがまた自分ができたものを最後にポストして解決済みに致します。

    その前にまたお聞きしちゃうかもしれませんができるだけ自分で調べます。
    すみません。ありがとうございます。

    わざわざ代替テキストを取得しなくてもwp_get_attachment_image()を使えば画像を表示できますが…。

    <?php
    $attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order'));
    if(!empty($attachments)){
    	foreach($attachments as $attachment){
    		echo wp_get_attachment_image($attachment->ID,'large');
    	}
    }
    ?>

    ギャラリーの順序で指定した順番で取得できますので、1つめの画像はこの位置、2つめの画像はこの位置、みたいなデザインが出来ます

    そういうことなのかと思ったらそうじゃないみたいですよ。話の流れを見ると。

    ああ、すみません…。投稿編集画面以外でアップロードしたいのですね(なぜ?)
    画像のファイル名からさがすのは難しいですがsysbirdさんの仰るように画像のタイトルからならさがせます。

    $attachments = get_posts('name=xxx_1&post_type=attachment');

    トピック投稿者 webarton

    (@webarton)

    umbrella_projectさん、kvexさん、ありがとうございます。

    取得したいのがタイトルなので、難しいのですね。
    記事画面のレイアウトを統一したいので、投稿時に決まったフィールドに入力してもらうようにするつもりでいますが、ただ画像だけよい方法が見つからなかったので、画像ファイル名をカスタムフィールドで登録してもらい、メディアライブラリにはその画像名でアップロードしてもらおうかと思ったのです。

    それで、ファイル名から画像タイトルを取得したいと思っていました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「メディアライブラリの画像ファイル名から、タイトルか代替テキストを取」には新たに返信することはできません。