web-dev-qa-db-ja.com

抜粋後の最初の3つの画像

私はそれらにかなりの数の画像を含む[ギャラリー]にすぎない特定の投稿を持っています。ユーザーが残りの部分を見るためにクリックスルーしなければならないように、インデックス上のこれらの投稿の最初の3つの画像のみを表示するように自動生成された抜粋を定義する方法はありますか?ありがとうございました。

3
sosukeinu

do_shortcode関数を使えば、これはかなり簡単にできます。

投稿コンテンツに[gallery]のインスタンスが存在するかどうかを確認してください。

これは、現在の投稿のギャラリーのショートコードの内容をチェックするfunctions.phpをドロップする簡単な関数です。

function gallery_shortcode_exists(){

    global $post;

    # Check the content for an instance of [gallery] with or without arguments
    $pattern = get_shortcode_regex();
    if(
        preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'gallery', $matches[2] )
    )
        return true;

    # Sourced from http://codex.wordpress.org/Function_Reference/get_shortcode_regex
}

ギャラリーをレンダリングするにはdo_shortcode()を使います。

テンプレートファイルのループ内で次のものを使用できます。

# Determine if the post_content column contains the string [gallery]
if( gallery_shortcode_exists() ){

    # Get the first three attachments using the posts_per_page parameter
    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => 3,
        'post_parent' => get_the_ID()
    );
    $attachments = get_children( $args );

    # If any attachments are returned, proceed
    if( $attachments ){

        # Spin cycle to collate attachment IDs
        foreach( $attachments as $attachment )
            $includes[] = $attachment->ID;

        # Format our IDs in a comma-delimited string
        $includes = implode(',', $includes);

        # Inject your include argument
        $shortcode = str_replace('[gallery', "[gallery include='$includes' ", get_the_content());

        # Render the Gallery using the standard editorial input syntax
        echo do_shortcode($shortcode);

        # Add a View More link
        echo '<a href="' . get_permalink() . '">' . __('View more', 'domain') . '</a>';
    }
    else
        _e('Foo Bar - No attachments found and no excerpt to display', 'domain');
}
else
    # Whatever fallback you desire
    the_excerpt();
5
Brian Fegter