記事一覧
カスタム投稿タイプの一覧
<?php
$query = new WP_Query(array(
'post_type' => 'news',
'posts_per_page' => 5,
));
if($query->have_posts()):
?>
<div class="news__list">
<?php while($query->have_posts()): $query->the_post(); $page_terms = get_the_terms($post->ID, 'news-cat'); ?>
<article class="news__article">
<time class="time" datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></time>
<span class="cat"><a href="<?php echo get_term_link($page_terms[0]->slug, 'news-cat'); ?>"><?php echo $page_terms[0]->name ?></a></span>
<h3 class="headline"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
</article>
<?php endwhile; ?>
</div>
<?php else: ?>
<p class="noFind">記事が見つかりませんでした。</p>
<?php endif; ?>カスタム投稿タイプの全てのタクソノミーの一覧
カスタム投稿の全てのタクソノミーを、各タクソノミー毎に一覧表示して、タブ切り替えさせる
使用サイト:https://labowada.co.jp/
<?php $terms = get_terms('news-cat'); ?>
<ul class="list">
<li class="active"><span>すべて</span></li>
<?php
if(!empty($terms)) {
foreach($terms as $term) {
echo '<li><span>'.$term->name.'</span></li>';
}
}
?>
</ul>
<?php
if(!empty($terms)):
foreach($terms as $term):
$query = new WP_Query(array(
'post_type' => 'news',
'posts_per_page' => 5,
'tax_query' => array(
array(
'taxonomy' => 'news-cat',
'field' => 'slug',
'terms' => $term->slug,
)
),
));
if($query->have_posts()):
?>
<div class="news__list">
<?php while($query->have_posts()): $query->the_post(); $page_terms = get_the_terms($post->ID, 'news-cat'); ?>
<article class="news__article">
<time class="time" datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y.m.d'); ?></time>
<span class="cat"><a href="<?php echo get_term_link($page_terms[0]->slug, 'news-cat'); ?>"><?php echo $page_terms[0]->name ?></a></span>
<h3 class="headline"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
</article>
<?php endwhile; ?>
</div>
<?php else: ?>
<p class="noFind">記事が見つかりませんでした。</p>
<?php endif; endforeach; endif; ?>カスタムタクソノミー一覧
参考サイト
https://hirashimatakumi.com/blog/5509.html
https://recooord.org/wordpress-get-the-term/
<?php
$terms = get_terms('news-cat');
if(!empty($terms)) {
$current = '';
echo '<ul>';
foreach($terms as $term) {
if($term->slug === $term) $current = 'active';
echo '<li class="'.$current.'"><a href="'.get_term_link($term).'">'.$term->name.'</a></li>':
}
echo '</ul>';
}
?>ページネーション
the_posts_pagination
<?php
the_posts_pagination(array(
'end_size' => '1',
'mid_size' => '2',
'prev_next' => true,
'prev_text' => '<figure><img src="'.get_template_directory_uri().'/assets/img/common/icon-arrow-blue.svg"></figure>',
'next_text' => '<figure><img src="'.get_template_directory_uri().'/assets/img/common/icon-arrow-blue.svg"></figure>',
'type' => 'list',
));
?>the_posts_paginationの出力HTML
<nav aria-label="投稿" class="navigation pagination">
<h2 class="screen-reader-text">投稿ナビゲーション</h2>
<div class="nav-links">
<ul class="page-numbers">
<li><span class="page-numbers current">1</span></li>
<li>
<a class="page-numbers" href="/news/page/2/">2</a>
</li>
<li>
<a class="next page-numbers" href="/news/page/2/"></a>
</li>
</ul>
</div>
</nav>paginate_links
<?php
$query = new WP_Query(array(
'post_type' => 'news',
'posts_per_page' => 5,
));
$big = 999999999;
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'mid_size' => 1,
'format' => '?paged=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $query->max_num_pages,
'prev_text' => '<figure><img src="'.get_template_directory_uri().'/assets/img/common/arrow-green.svg"></figure>',
'next_text' => '<figure><img src="'.get_template_directory_uri().'/assets/img/common/arrow-green.svg"></figure>',
));
?>記事ページの前後のページのリンク
<div class="page-guide">
<?php
if(get_previous_post()) {
echo '<div class="link prev">';
previous_post_link('%link', '<figure><img src="'.get_template_directory_uri().'/assets/img/common/icon-arrow-blue.svg"></figure>');
echo '</div>';
}
echo '<a href="'.esc_url(home_url('/news/')).'" class="btnType01">一覧に戻る</a>';
if(get_next_post()) {
echo '<div class="link next">';
next_post_link('%link', '<figure><img src="'.get_template_directory_uri().'/assets/img/common/icon-arrow-blue.svg"></figure>');
echo '</div>';
}
?>
</div>記事一覧の記事の内容の抜粋
記事本文を取得して、設定された文字数を超えると、「…」を表示する
<?php
$content = get_the_content();
$content = strip_tags(strip_shortcodes($content));
$limit = 100;
if(mb_strlen($content) > $limit) {
$content = mb_substr($content, 0, $limit).'…';
}
?>
<p class="excerpt"><?=$content?></p>