web-dev-qa-db-ja.com

リンクだけであれば、どうやって異なる画像サイズを取得できますか?

さまざまな理由から、私はWordpressの組み込みThumbnail機能を使用できません。

代わりに、投稿の最初の画像をサムネイルとして使用します。

これが私がコーデックスで見つけたものです: 投稿に関連した最初の画像を表示します

ただし、問題は、投稿に複数の画像が含まれていても、投稿の最初の画像が実際に最初にアップロードされたものではない場合、最初の画像ではなく2番目の画像が表示されることです。


そこで、私は このアプローチ に似たものを使うことにしました - /、最初の投稿を見つけるためにthe_contentを解析するために正規表現を使います。

これはうまくいきますが、投稿で使用されていた画像サイズが最終的に表示されるので、サムネイルサイズのみを使用します。


だから、ここに質問です:私は画像へのリンクがある場合、私は別のサイズを得ることができる方法はありますか?

私が必要としているのは、私がこれで画像サイズを取得することができるように、どういうわけか添付ファイルIDを取得することです:

wp_get_attachment_link( $id, 'thumbnail' );

問題は、URLがだけだとしたらどうやってIDを取得できますか?

2
Joseph Silber

私はこれを使うことにしました。これは@ AndresYanezの答えに基づいています。

function get_image_id_by_link($link)
{
    global $wpdb;

    $link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link);

    return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid='$link'");
}

これははるかに簡潔です(最初に拡張子を削除してから再び追加するというフープを飛び越えないので)、そしてもう少し正確です(.がエスケープされ、クエリが大文字と小文字を区別するため)。

6
Joseph Silber
function get_attachment_id_from_src ($src) {
    global $wpdb;

    $reg = "/-[0-9]+x[0-9]+?.(jpg|jpeg|png|gif)$/i";

    $src1 = preg_replace($reg,'',$src);

    if($src1 != $src){
        $ext = pathinfo($src, PATHINFO_EXTENSION);
        $src = $src1 . '.' .$ext;
    }

    $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$src'";
    $id = $wpdb->get_var($query);

    return $id;
}

Pathorsleyへのクレジット: http://www.pathorsley.com/code/get-the-wordpress-post-attachment-id-from-an-image-src/

1
Andres Yanez

コーデックスは有効な情報源です

時々 The Codex はそんなに間違っていません...

現在の投稿の添付ファイルを表示する

これはCodexのややの変更例です。

<?php
// Do this inside The Loop (where $post->ID is available).
global $post;
$args = array( 
     'post_type'    => 'attachment'
    ,'numberposts'  => 1
    ,'post_status'  => null
    ,'post_parent'  => $post->ID
    ,'orderby'      => 'ID'
    ,'order'        => 'ASC' 
); 
$attachments = get_posts( $args );
if ( $attachments ) 
{
    foreach ( $attachments as $attachment ) 
    {
        echo apply_filters( 'the_title' , $attachment->post_title );
        the_attachment_link( $attachment->ID , false );
    }
}
?>

賢くする - システムの背後にあるシステムを使用する

Codexの例への変更は簡単です:numberpostsは1に設定され、orderbyの値はIDであり、最も低いIDの投稿を最初に取得するためにASCをソートします。

それで、これがsmartである理由はここにあります:IDは順番に与えられます、それで最初にアップロードされた投稿は最も低いIDを持つでしょう。

上の例では、最後の関数をwp_get_attachment_link()と単純に交換してそれを何らかのvarに保存することができます。後で再利用することができます。

0
kaiser