私は現在、Wordpressネットワーク内の他のサイトに投稿をコピーできるようにWordpressを設定しました。ただし、投稿が複数回ブロードキャストされる可能性があるため、そのサイトのwp_posts
テーブルに画像が既に公開されているかどうかを確認したいと思います。
例として、画像に画像パスがあるとしましょう。
/wp-content/uploads/2012/01/an_image.jpg
すべての画像は、ネットワークによって(デフォルトの/blogs.dir/files/
ではなく)このフォルダの設定内に保存されます。
言い換えれば、Wordpressがデータベースに問い合わせて、これがすでにテーブルにあるかどうかを確認できますか。それともPHPデータベースクエリとして記述する必要がありますか。
はい、データベースクエリはWordPressで可能です:
function is_image_in_network( $image_name )
{
global $wpdb;
$image = "uploads/2012/01/{$image_name}";
$value = '%'.like_escape( $image ).'%';
$blog_id = get_current_blog_id();
$wpdb->set_blog_id( $blog_id );
$image = $wpdb->get_var(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_status = 'publish'
AND post_content LIKE '%s'"
, $value
)
);
return is_null( $image ) ? false : true;
}
あなたはあなたのテンプレートの関数としてそれを使うことができます。画像名を追加するだけで、引数として探しています。新しい "Template Tag"は、デフォルトのWP "Conditional Tag"のように機能します。
Questionのそのimage.php
はタイプミスですか?
私は検索文字列%uploads/2012/01/an_image%
を拡張子なしで残しているので、すべての画像(オリジナルとサムネイル)を捕らえることができます。
ドキュメント: Class_Reference/wpdb 。
最も簡単な方法は、{shouldを wp_attachment_is_image()
にすることです。
if ( ! wp_attachment_is_image( $post_ID ) )
{
// process needed tasks
}
これは、 image/*
またはの拡張子が'jpg', 'jpeg', 'jpe', 'gif', 'png'
のファイルのみを考慮に入れることに注意してください。
これはテストされていません。