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