ここでは、get_posts関数を使ったいろいろなサブループの作り方をまとめてみます。それぞれのコードの仕組みついては各記事をご参照ください。
コンテンツ
投稿でカテゴリを指定したサブループ
PHP
<?php
$cat_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'category' => 1, // カテゴリIDを番号で指定する場合
'category_name' => 'スラッグ', // カテゴリをスラッグで指定する場合
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC' // 昇順・降順
));
global $post;
if($cat_posts): foreach($cat_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_category(', ') ?></p>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; endif; wp_reset_postdata(); ?>
投稿でタグを指定したサブループ
PHP
<?php
$tag_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'tag_id' => 1, // タグIDを番号で指定する場合
'tag' => 'スラッグ', // タグをスラッグで指定する場合
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC' // 昇順・降順
));
global $post;
if($tag_posts): foreach($tag_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<?php the_tags( '<p>', ', ', '</p>' ); ?>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; endif; wp_reset_postdata(); ?>
投稿でカテゴリとタグを組み合わせて指定したサブループ
PHP
<?php
$my_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'category' => 1, // カテゴリIDを番号で指定する場合
'category_name' => 'スラッグ', // カテゴリをスラッグで指定する場合
'tag_id' => 1, // タグIDを番号で指定する場合
'tag' => 'スラッグ', // タグをスラッグで指定する場合
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC' // 昇順・降順
));
global $post;
if($my_posts): foreach($my_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; endif; wp_reset_postdata(); ?>
表示中の投稿カテゴリ記事を一覧表示させるサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$cat = get_the_category($post_id);
$cat_id = $cat[0]->cat_ID;
$cat_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'category' => $cat_id, // カテゴリID
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'exclude' => $post_id // 表示中の投稿を除外
));
$count = count($cat_posts);
if($count>=1): foreach($cat_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_category(', ') ?></p>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
表示中の投稿タグを記事一覧表示させるサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$tag = get_the_tags($post_id);
$tag_id = $tag[0]->term_id;
$tag_posts = get_posts(array(
'post_type' => 'post', //投稿タイプ
'tag_id' => $tag_id, // タグIDで指定する場合
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示させる基準
'order' => 'DESC', // 文字列の順番(昇順・降順)
'exclude' => $post_id // 表示中の投稿を除外
));
$count = count($tag_posts);
if($count>=1): foreach($tag_posts as $post): setup_postdata($post);?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<?php the_tags( '<p>', ', ', '</p>' ); ?>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
カスタム投稿タイプで指定したタームのサブループ
PHP
<?php
$custom_posts = get_posts(array(
'post_type' => 'カスタム投稿タイプスラッグ', // 投稿タイプ
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'tax_query' => array(
array(
'taxonomy' => 'タクソノミースラッグ', //タクソノミーを指定
'field' => 'slug', //ターム名をスラッグで指定する
'terms' => 'タームスラッグ', //表示したいタームをスラッグで指定
'operator' => 'IN'
),
)
));
global $post;
if($custom_posts): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); endif; ?>
カスタム投稿タイプで複数のタクソノミーからタームを指定したサブループ
PHP
<?php
$custom_posts = get_posts(array(
'post_type' => 'カスタム投稿タイプスラッグ', // 投稿タイプ
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'tax_query' => array (
'relation' => 'AND', //タクソノミー同士の関係を指定
array (
'taxonomy' => 'タクソノミースラッグ1',
'field' => 'slug',
'terms' => array ( 'スラッグ1', 'スラッグ2' ),
'operator' => 'IN'
),
array (
'taxonomy' => 'タクソノミースラッグ2',
'field' => 'slug',
'terms' => array ( 'スラッグ3', 'スラッグ4' ),
'operator' => 'IN'
)
)
));
global $post;
if($custom_posts): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); endif; ?>
表示中のカスタム投稿タイプのタームの記事一覧を表示させるサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$post_type = get_post_type();
$taxonomy = 'タクソノミースラッグ'; //タクソノミーを指定
$term = get_the_terms($post_id, $taxonomy);
$term_slug = $term[0]->slug;
$custom_posts = get_posts(array(
'post_type' => $post_type,
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'exclude' => $post_id, // 表示中の投稿を除外
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $term_slug,
'operator' => 'IN'
),
)
));
$count = count($custom_posts);
if($count>=1): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
表示中のカスタム投稿タイプで複数のタクソノミーからタームを絞り込み記事一覧させるサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$post_type = get_post_type();
$taxonomy01 = 'タクソノミースラッグ1'; //タクソノミー1を指定
$term01 = get_the_terms($post_id, $taxonomy01);
$term_slug01 = $term01[0]->slug;
$taxonomy02 = 'タクソノミースラッグ2'; //タクソノミー2を指定
$term02 = get_the_terms($post_id, $taxonomy02);
$term_slug02 = $term02[0]->slug;
$custom_posts = get_posts(array(
'post_type' => $post_type,
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'exclude' => $post_id, // 表示中の投稿を除外
'tax_query' => array (
'relation' => 'AND', //タクソノミー同士の関係を指定
array (
'taxonomy' => $taxonomy01,
'field' => 'slug',
'terms' => $term_slug01,
'operator' => 'IN'
),
array (
'taxonomy' => $taxonomy02,
'field' => 'slug',
'terms' => $term_slug02,
'operator' => 'IN'
)
)
));
$count = count($custom_posts);
if($count>=1): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
表示中の投稿のカスタムフィールド値を1つ指定したサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$field_name = '項目名'; // カスタムフィールドの項目名
$value = post_custom( $field_name );
$my_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'meta_key' => $field_name, // カスタムフィールドの項目名
'meta_value' => $value, // カスタムフィールドの値
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'exclude' => $post_id // 表示中の投稿を除外
));
$count = count($my_posts);
if($count>=1): foreach($my_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_category(', ') ?></p>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
表示中の投稿のカスタムフィールド値を複数指定したサブループ
PHP
<?php
global $post;
$post_id = $post->ID;
$key01 = '項目名1'; // カスタムフィールドの項目名1
$key02 = '項目名2'; // カスタムフィールドの項目名2
$value01 = post_custom( $key01 ); // カスタムフィールドの値1
$value02 = post_custom( $key02 ); // カスタムフィールドの値2
$my_posts = get_posts(array(
'post_type' => 'post', // 投稿タイプ
'posts_per_page' => 6, // 表示件数
'orderby' => 'date', // 表示順の基準
'order' => 'DESC', // 昇順・降順
'exclude' => $post_id, // 表示中の投稿を除外
'meta_query' => array(
array(
'key' => $key01,
'value'=> $value01
),
array(
'key' => $key02,
'value'=> $value02
)
)
));
$count = count($my_posts);
if($count>=1): foreach($my_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_category(', ') ?></p>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); else: ?>
<p>記事がありません。</p>
<?php endif ?>
カスタム投稿タイプをカスタムフィールドの値で並び替えさせるサブループ
PHP
<?php
$custom_posts = get_posts(array(
'post_type' => 'カスタム投稿タイプスラッグ', // 投稿タイプ
'posts_per_page' => 6, // 表示件数
'meta_key' => 'カスタムフィールドのキー', //並び替えに利用したいカスタムフィールドのキーを指定
'orderby' => 'meta_value', //カスタムフィールドの値で並び替え
'order' => 'ASC' // 昇順・降順
)
));
global $post;
if($custom_posts): foreach($custom_posts as $post): setup_postdata($post); ?>
<!-- ループはじめ -->
<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
<p><?php the_time('Y/m/d') ?></p>
<p><?php the_excerpt(); ?></p>
<!-- ループおわり -->
<?php endforeach; wp_reset_postdata(); endif; ?>
以上がget_postsを使用したサブループの作り方まとめでした。



















