WordPressでよく使うコード

記事一覧

カスタム投稿タイプの一覧

<?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>