これは些細なことですが、私は本当に答えを見つけることができません、私はデータベースなどで検索のようないくつかのヒントを見ました、しかしこれは狂気です。
基本的に、私はあなたがメディアライブラリから既存の画像をアップロードまたは選択することを可能にするアップロードボタン付きメタボックスを持っています、それは私がこの画像の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を持たせたいと思います。
わかりました、これらすべてのハイパーコンプレックス関数は1つの簡単なコマンドに減らすことができます:attachment_url_to_postid
添付ファイルIDを取得するには、画像のURLを解析するだけです。
<?php
$attachment_id = attachment_url_to_postid( $image_url );
echo $attachment_id;
?>
必要なものはこれだけです。
そのような場合に私がすることは、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を取得するためにデータベースに問い合わせるよりも速いことがわかりました。
CMBプラグインを使用していたときに同じ問題がありました。画像のURLを使用して画像IDを取得するために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');
保存しているすべての投稿メタは添付ファイルタイプの投稿に添付されているので、$post->ID
が添付ファイルIDであると考えることができます。