ミニブログの的に作ったlog内の特定カテゴリー「training」の抜粋をサイドバーにリスト表示したい。
ステップ1:ショートコード関数の定義
functions.phpに以下のコードを入力
// ショートコード [log_training_excerpt] を定義
function log_training_excerpt_list() {
// WP_Query で取得する条件を指定(トレーニングカテゴリのログ投稿のみ)
$args = array(
'post_type' => 'log', // カスタム投稿タイプ「log」から取得
'posts_per_page' => 5, // 最大表示件数(必要に応じて変更OK)
'orderby' => 'date', // 日付順に並び替え
'order' => 'DESC', // 新しい順に表示
'tax_query' => array( // カスタムタクソノミーでカテゴリを指定
array(
'taxonomy' => 'log_category', // log 投稿に割り当てたカテゴリタクソノミー名
'field' => 'slug', // カテゴリの「スラッグ」で指定
'terms' => 'training', // スラッグが「training」のカテゴリを対象にする
),
),
);
// クエリを実行
$query = new WP_Query($args);
ob_start(); // 出力をバッファリング
// 投稿があればリストとして出力
if ($query->have_posts()) {
echo '<ul class="log-training-list">';
while ($query->have_posts()) {
$query->the_post();
echo '<li>';
echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a><br>';
echo '<small>' . get_the_excerpt() . '</small>';
echo '</li>';
}
echo '</ul>';
} else {
// 投稿が1件もない場合の表示
echo '<p>トレーニング記録がまだありません。</p>';
}
wp_reset_postdata(); // グローバル $post を元に戻す
return ob_get_clean(); // 出力を返す
}
ステップ2:ショートコードを有効化
先ほどのコードの下に以下のコードを追記
// 上の関数を [log_training_excerpt] というショートコードで使えるようにする
add_shortcode('log_training_excerpt', 'log_training_excerpt_list');
使い方(投稿やウィジェットに貼る)
以下のショートコードを使えばOK:
[log_training_excerpt]
サイドバーにタイトル(日付)と抜粋のリストが現れた。

注意点
log_category
が「カスタム分類名(taxonomy)」として正しく登録されている必要があるtraining
は「スラッグ」であること(表示名じゃない)- 投稿が「公開」状態であること
- 投稿タイプが「log」で、ちゃんと
log_category
に属していることを確認