web-dev-qa-db-ja.com

特定のサイズで画像srcから画像を切り取る方法

メタボックスフィールドによるユーザー入力から画像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を取得していません。問題はどこだ?

3
Eh Jewel

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 ));

これは最初の方法と同じです。

3
Jack Johansson