web-dev-qa-db-ja.com

画像が既にサイトの投稿データベースに保存されているかどうかを確認するにはどうすればいいですか? (ネットワーク)

私は現在、Wordpressネットワーク内の他のサイトに投稿をコピーできるようにWordpressを設定しました。ただし、投稿が複数回ブロードキャストされる可能性があるため、そのサイトのwp_postsテーブルに画像が既に公開されているかどうかを確認したいと思います。

例として、画像に画像パスがあるとしましょう。

/wp-content/uploads/2012/01/an_image.jpg

すべての画像は、ネットワークによって(デフォルトの/blogs.dir/files/ではなく)このフォルダの設定内に保存されます。

言い換えれば、Wordpressがデータベースに問い合わせて、これがすでにテーブルにあるかどうかを確認できますか。それともPHPデータベースクエリとして記述する必要がありますか。

6
Ollie

はい、データベースクエリは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

2
brasofilo

最も簡単な方法は、{shouldwp_attachment_is_image() にすることです。

if ( ! wp_attachment_is_image( $post_ID ) )
{
    // process needed tasks
}

これは、 image/*またはの拡張子が'jpg', 'jpeg', 'jpe', 'gif', 'png'のファイルのみを考慮に入れることに注意してください。

これはテストされていません。

0
kaiser