私たちはWordpressのmysqlデータベースに基づいてAndroidアプリを構築しています。データからほとんどの情報を取得してアプリに表示することができました。今、私たちが残したのは、投稿特集画像を取得することだけです。
注目の画像にURLを出力させる方法はありますか?
ありがとうございます。
注目の画像添付ファイルIDは、meta_key _thumbnail_id
と共にpost_metaテーブルに格納されます。
その投稿IDを使用して、meta_key _wp_attachment_metadata
を持つ投稿メタを見つけます。
その値は、キーthumb
、file
、width
、height
、sizes
(配列)、およびimage_meta
(配列)を持つ直列化された配列です。
file
値は、WP installのuploadsディレクトリを基準にしており、元のフルサイズイメージを指しています。あなたはそれからURLを計算することができるはずです。
sizes
はキーとして画像サイズを持ち(例えば、「小」、「中」、「大」、「サムネイル」)、値はキーfile
、height
、およびwidth
を持つ配列です。
image_meta
は、画像自体のexif/iptc画像メタデータのようなものを含みます。
投稿のおすすめ画像は、その投稿に対する通常の古い添付ファイルです。したがって、他の画像添付ファイルと同様に、投稿タイプattachment
についてwp_posts
テーブルを照会する必要があります。トリックはあなたがつかむ必要がある添付ファイルIDを最初に得ることです。
これは与えられた記事のメタ情報、具体的には_thumbnail_id
メタに含まれています。
そのため、次のようなクエリが必要になります。
_thumbnail_id
テーブル内のキーwp_postmeta
でマークされた値を取得します。wp_posts
テーブルから添付ファイルを取得します。しかし、本当に、あなたはここで車輪を再発明するために多くの仕事をしています...
投稿のサムネイルは、キー{$wpdb->prefix}_postmeta
と共に_thumbnail_id
テーブルに保存されます。
このようなもの:
SELECT * from {$wpdb->prefix}_posts
WHERE ID in (
SELECT meta_value FROM {$wpdb->prefix}_postmeta
WHERE meta_key = '_thumbnail_id'
AND post_id = ':ID'
);
IDを投稿IDに置き換えます。
これは画像自体に関連付けられたPostを返します - post_title
は画像のtitle属性に関連付けられたユーザが何でも、そしてguid
がフルサイズの画像URLになります。
異なるサイズが必要な場合は、すべての異なるサイズの直列化配列を含む_wp_attachment_metadata
postmeta値を調べる必要があります。
WordPressのapiを使う方がはるかに簡単です。
<?php
if(has_post_thumbnail($some_post_id))
{
$img = wp_get_attachment_img_src(get_post_thumbnail_id($some_post_id), 'the_image_size');
// returns an array, the first item is the image URL
echo $img[0];
}
投稿データ、注目画像のURL、機能画像の詳細(寸法など)を取得するために使用したものは次のとおりです。
SELECT p.*, ( SELECT guid FROM wp_posts WHERE id = m.meta_value ) AS imgurl, (SELECT meta_value FROM wp_postmeta pm WHERE meta_key='_wp_attachment_metadata' AND pm.post_id=m.meta_value ) AS imgdetails
FROM wp_posts p
LEFT JOIN wp_postmeta m ON(p.id = m.post_id AND m.meta_key = '_thumbnail_id' )
WHERE p.post_type = 'post'
AND p.post_status = 'publish' AND p.id=@postId;
次のクエリを使用して、すべての投稿の注目画像を取得します。
SELECT result.post_parent, result.guid AS featuredImage
FROM wp_posts AS p
INNER JOIN wp_postmeta AS pm ON p.ID=pm.post_id
INNER JOIN wp_posts as result ON pm.meta_value = result.ID
WHERE pm.meta_key = '_thumbnail_id' AND p.post_type='post' AND
p.post_status = 'publish'
最良のSQLソリューション
Wp_postからIDを検索
SELECT * FROM wp_posts WHERE post_status='publish'
メタコンテンツを見つけた
SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=MyID
サムネイルIDを使用して、ファイルをもう一度検索してwp_postmetaを探します。
SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=MyID
その一例です。
$query = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish' ORDER BY id DESC LIMIT 6") or die(mysql_error());
$json='{ "Blog" : [ ';
while($row =mysql_fetch_array($query)){
$queryMeta=mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=$row[ID]") or die(mysql_error());
$f=mysql_fetch_array($queryMeta);
$value=$f[meta_value];
$queryMeta2=mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=$value") or die(mysql_error());
$f2=mysql_fetch_array($queryMeta2);
$value=$f2[meta_value];
$json.='{"id" : "'.$row[ID].'" , "date" : "'.$row[post_date].'", "title" :"'.$row[post_title].'", "link" : "'.$row[guid].'" , "image" :"https://dartesanos.com/blog/wp-content/uploads/'.$value.'" },';
}
$json=substr($json,0,-1);
echo $json ."]}";