メタボックスフィールドによるユーザー入力から画像srcを取得しました。今、私はこの画像を特定のサイズでレンダリングしたいです。 WordPressの画像を特定のサイズでトリミングするのと同じです。
私はsrcから画像IDを取得しようとしました、そしてサイズ変更された画像で画像srcを取得するために以下の関数を使いました。
<?php
$img_id = get_image_id($img_src);
$sized_img_src = wp_get_attachment_image_src($img_id, 'image_size');
そしてこれがget_image_id()
関数です。
function get_image_id($image_url) {
global $wpdb;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
return $attachment[0];
}
実は、この機能でアップロードされた画像の画像IDを取得していません。問題はどこだ?
WordPressには、この目的のためだけに設計された機能があります。 attachment_url_to_postid()
を使用すると、そのURLから添付ファイルのIDを取得できます。これを使用して、後で投稿のIDを取得できます。
もしあなたがMySQLクエリを書くことによってそれをしたいのであれば、私は代わりにmeta_value
でファイルの名前を検索することをお勧めします:
$basename = basename ($image_url);
$sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = '$basename '";
$id = $wpdb->get_var($sql);
投稿を公開すると、GUID列はデータベースにハードコードされます。そのため、localhostで投稿を公開すると、GUIDのサンプルは次のようになります。
http://localhost/wp-content/uploads/my-image.jpg
しかし、あなたはこれを使ってあなたの画像の online URLを検索するでしょう。
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
明らかに何も返さないでしょう。ただし、basenameと一緒にLIKE
を使用できます。
$img_name = basename ($image_url);
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid LIKE '%s';", $img_name ));
これは最初の方法と同じです。