ミニブログの的に作った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]

サイドバーにタイトル(日付)と抜粋のリストが現れた。

WordPressサイドバーに表示されたカスタム投稿タイプ「log」の抜粋(トレーニング記録)
カスタム投稿「log」の最新投稿がサイドバーに抜粋表示されるよう設定した例。

注意点

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

おすすめの記事