ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

WP_Queryループで抽出条件を指定@WordPress

f:id:showjinx:20160416143639j:plainWordPressのループでカテゴリを指定する例です。

WP_Query()です。

サブループなのでループごとにリセットの記述をしておけば同一ページで複数の異なるループ(カテゴリごとに分けてとか)を出力出来ます。

<?php
    $query = new WP_Query(array(
        'posts_per_page' => 6, // 表示件数
        'post_type' => 'post',     /* イベント投稿タイプ */
        'category_name' => 'news', /* カテゴリのスラッグを指定 */
        // 'cat' => '2', /* カテゴリIDで指定する場合(複数ある場合はカンマでつなげる) */
        'post_status' => 'publish',  /* 公開している */
    ));
    if($query->have_posts()):
    while($query->have_posts()) : $query->the_post(); ?>
        <div>
            <div>
                <strong><a href=""><?php the_title(); ?></strong></h1>
                <p><?php echo my_excerpt(38); ?></p>
                <a href="<?php the_permalink(); ?>" class="read">続きを読む</a>
            </div>
        </div>
    <?php endwhile; ?>
    <?php else : ?>
        <div>
            <div>
                <p>表示する記事はありませんでした。</p>
            </div>
        </div>
<?php endif; ?>
<?php wp_reset_postdata(); /* WP_Queryのループをリセット */ ?>

投稿の抜粋を制御する独自関数

<?php echo my_excerpt(38); ?>

上記の記述は本投稿の主題とは関係ありませんが、ホームやカテゴリごとの一覧ページ等で「本文の最初◯◯文字まで」というふうに出力を制限する場合にわりとよく使用する(すくなくとも私は)関数です。ご利用のthemeのfunctions.phpに以下を記述して使います。指定した文字数を超えた場合には末尾に三点リーダー(…)を出力し、その後に「▶」も出力します。

/** 抜粋表示 **/

function my_excerpt( $length ) {
     global $post;
     $content = mb_substr( strip_tags( $post -> post_content ), 0, $length );
     $content = $content . " …<a class=\"more\" href=\"" . get_permalink() . "\"></a>";
     return $content;
}

上記コードをfunctions.phpに記述した上で、実際に抜粋を表示するテンプレートに前述のこれを記述します。数字部分が出力する文字数になります。

<?php echo my_excerpt(38); ?>

本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版

本格ビジネスサイトを作りながら学ぶ WordPressの教科書 Ver.4.x対応版