Swiper.jsを使って新着記事一覧を表示してみる


composerでTwitterのoauthライブラリを利用しタイムラインを取得する (2019.08.11)
TwitterのタイムラインをAPIで取得してサイトに表示してみる (2019.08.07)
TwitterのDeveloper account登録をしてみる (2019.08.03)
Twitterのタイムラインを埋め込んでみる (2019.08.03)
固定ページの子ページ一覧をカルーセル表示する (2019.07.28)
Swiper.jsでフォトギャラリーを作る (2019.07.26)
Swiper.jsを使って新着記事一覧を表示してみる (2019.07.25)
FacebookのFeedとSwiper.jsを使ってタイムライン表示をアレンジ (2019.07.04)
人気の記事一覧をトップページにカルーセル表示する (2019.06.24)
OnePressのカスタマイズ-3. スタイルシートの変更 (2019.06.12)

せっかくSwiper.jsを導入したので、さまざまなカルーセル表示を試してみたいと思います。

新着記事一覧はプラグイン等で簡単に実装できるのですが、自分の思い通りのデザインや動きを実現させるために、自力でコードを書いてみて基本を知っておくのも大事ですよね。

Swiper.jsの導入については以下の記事を参考にしてください。

FacebookのFeedとSwiper.jsを使ってタイムライン表示をアレンジ

今回も、「phpコードを記述した別ファイルをテーマ内にアップロードして、そのファイルをショートコードで呼び出す」という方法で実装しています。もちろんfunctions.phpに直接記述してもよいのですが、外部ファイルにしておいたほうが細かい調整をするときに楽です。ちょっとした記述ミスでサイト全体が表示されなくなってしまう、というような危険を回避できますので。

今回は、new_posts_carousel.phpというファイルを作成してテーマフォルダ内にアップロードし、[myphp file='new_posts_carousel']というショートコードで呼び出すようにしています。

new_posts_carousel.phpは以下のようなコードにしています(一部cssは省略しています)。scriptに「effect: ‘coverflow’,」を追加するだけで、3次元的な動きが実現します。

<div class="swiper-container" style="padding-bottom: 50px; height: 250px;">
<div class="swiper-wrapper">

<?php
  global $post;
  $args = array( 'posts_per_page' => 10 );
  $myposts = get_posts( $args );
 
  foreach( $myposts as $post ) {
  setup_postdata($post);
?>

  <div class="swiper-slide" style="position:relative; height:200px;">

  <a href="<?php the_permalink() ?>">
  <div style="height:130px;background:url(<?php the_post_thumbnail_url('medium'); ?>) no-repeat center top / cover;"></div>
  </a>

  <div style="position:absolute;width:100%;bottom:0px;">
  <?php the_title(); ?> (<?php the_time('Y.m.d') ?>)
  </div>

  <div style="position:absolute;top:0px;right:0px;">
  <?php the_category(' | '); ?>
  </div>

  </div>
<?php
  }
  wp_reset_postdata();
?>

</div>

<div class="swiper-pagination" style="margin-bottom:10px;"></div>

</div>

<script src="【ファイルへのパス】/swiper.min.js"></script>
<script>
var mySwiper = new Swiper ('.swiper-container', {
    loop: true,
    autoplay: {
      delay: 3000,
      disableOnInteraction: false,
    },
    speed: 2500,
    slidesPerView: 2,
    spaceBetween: 3,
    centeredSlides : true,
    effect:'coverflow';
    breakpoints: {
        767: {
            slidesPerView: 1,
            spaceBetween: 5,
        }
    },
    pagination: {
        el: '.swiper-pagination',
     clickable: true,
    },
})
</script>