web-dev-qa-db-ja.com

Attachment_idを取得する方法

これは些細なことですが、私は本当に答えを見つけることができません、私はデータベースなどで検索のようないくつかのヒントを見ました、しかしこれは狂気です。

基本的に、私はあなたがメディアライブラリから既存の画像をアップロードまたは選択することを可能にするアップロードボタン付きメタボックスを持っています、それは私がこの画像のURLを取得する方法です:

$my_image = get_post_meta($post->ID, '_my_image_metabox', true);

もちろん、この画像の正確なサイズを表示したいので、次のものを使用する必要があります。

wp_get_attachment_image_src($attachment_id, 'desired-size');

問題はどうやってattachment_id_my_image_metaboxを手に入れることができるのですか?私は文字通り至る所を検索してきましたが、正しい答えはありません。Codexで$attachment_idを取得するための単一行がない場合、wp_get_attachment_image_src()はどのように機能するはずですか? :)

[更新済み]

var_dump($my_image)は以下を返します。

array(1) { [0]=> string(86) "http://localhost/theme/wp-content/uploads/2014/10/my_image.jpg" }

私のメタボックス生成クラスを使っているので、データを保存するのはとても複雑です。 https://github.com/nyordanov/SmartMetaBox/blob/master/SmartMetaBox.php

では、my_imageに適切なattachment_idを挿入するにはどうすればよいですか。私はこのような複数の(10)フィールドがあり、それぞれに個別のユニークなattachment_idを持たせたいと思います。

3
Wordpressor

わかりました、これらすべてのハイパーコンプレックス関数は1つの簡単なコマンドに減らすことができます:attachment_url_to_postid

添付ファイルIDを取得するには、画像のURLを解析するだけです。

<?php

   $attachment_id = attachment_url_to_postid( $image_url );
   echo $attachment_id;

?>

必要なものはこれだけです。

3
Ego Ipse

そのような場合に私がすることは、URLとともに隠し入力にIDを保存することです。

function meta_image_upload() {
    global $post;
    $my_image = get_post_meta($post->ID, '_my_image_metabox', true);
    $my_image_id = get_post_meta($post->ID, '_my_image_id_metabox', true);

    $out = '<input id="my_image" type="text" name="my_uploaded_image" value="'. $my_image .'">';
    $out .= '<input id="my_image_id" type="hidden" name="my_uploaded_image_id" value="'. $my_image_id .'">';
    $out .= '<button id="my_image_upload">Upload Image</button>';

    echo $out;
}  

アップロードハンドラスクリプトで:

attachment = custom_uploader.state().get('selection').first().toJSON();
    $('#my_image').val(attachment.url);
    $('#my_image_id').val(attachment.id); // Just add this line

それから他のコールバックで:

global $post;
$my_image_id = get_post_meta($post->ID, '_my_image_id_metabox', true);
wp_get_attachment_image_src($my_image_id, 'desired-size');

それは私の解決策であり、誰かがもっと良いものを考え出すかもしれません。しかし、関連する添付ファイルIDを取得するためにデータベースに問い合わせるよりも速いことがわかりました。

1
Abhik

CMBプラグインを使用していたときに同じ問題がありました。画像のURLを使用して画像IDを取得するためにfunctions.phpにカスタム関数を追加することで解決しました。

functions.php

function cmb_get_image_id($image_src) {
    global $wpdb;
    $image = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_src )); 
    return $image[0]; //return the image ID
}

あなたのテーマでは:

$my_image = get_post_meta($post->ID, '_my_image_metabox', false);
$attachment_id = cmb_get_image_id($my_image);
wp_get_attachment_image_src($attachment_id, 'desired-size');
1
Tomás Ramírez

保存しているすべての投稿メタは添付ファイルタイプの投稿に添付されているので、$post->IDが添付ファイルIDであると考えることができます。

0
Ahir Hemant