カラーミーショップにWordPressの投稿記事を出力し、Sliderのレイアウトに入れ込む
やりたいこと
- カラーミーショップにWordpressの投稿記事を自動で出力されるようにしたい
- 記事のサムネイルとタイトルを表示して1つのカードとし、slickでスライダーにしたい
WP REST APIで記事を取得してみた
の記事を参考にさせて頂きました。
手順
slickを利用する箇所にクラスを記載
<div class="slick-slider">
<div class="wp-post-list">
<!-- ここに記事が投稿記事がスライド形式で出力されるようにする -->
</div>
</div>
scriptの作成・記載
WP REST APIを利用して投稿のデータを取得する。
上記で記載したWP REST APIで記事を取得してみた
の記事から今回利用しないデータ(記事の日付など)を削除し、クラス名を変更する。
できたコード
$(function(){
var post = {
site_url: 'https://seno-production.com', // 記事を取得してくるwpのサイトurlを記載します
num: 5, // 取得する投稿記事の件数
};
api = post.site_url + "/wp-json/wp/v2/posts?per_page="+post.num+"&_embed";
$.getJSON( api, function(results) {
$.each(results, function(i, item) {
var title = item.title.rendered;
var link = item.link;
var thum = item._embedded["wp:featuredmedia"][0].media_details.sizes.medium.source_url;
$('.wp-post-list').append("<div class='wp-post-item'><div class='wp-post-item-wrap'><a class='wp-post-link' href='" + link + "'><img src='" + thum + "'></a></div><p class='wp-post-title'>" + title + "</p></div>");
});
$(".slick-slider").slick({
autoplay: false,
autoplaySpeed: 4000,
arrows: true,
dots: false,
infinite: true,
slidesToShow: 3,
slidesToScroll: 1,
responsive: [
{
breakpoint: 768,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
}
}
]
});
});
});
上記のscriptをカラーミーショップの設置したいページに記載します。
ハマった所
slickに関する下記コードはappendの下ではなく、違う所に記載していました。
$(".slick-slider").slick({
autoplay: false,
autoplaySpeed: 4000,
arrows: true,
dots: false,
infinite: true,
slidesToShow: 3,
slidesToScroll: 1,
responsive: [
{
breakpoint: 768,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
}
}
]
});
その結果、先にslickが動いてしまうようで記事の情報は出力されるがsliderにならない状態となっていました。
slickのレスポンシブ設定をしている事から、画面幅を変更するとslickのレイアウトが適応されるのですが、画面にアクセスした時やリロードするだけではスライドにならずという状態。
appendが終わって全てのhtmlが表示された後にslickが動けば良いと仮説を立てて調べた結果、
jqueryの $.whenとdoneに行きつきました。
下記のように書いてみたのですが特に変わらず。
$.when(
// ブログ記事を出力するコード
).done(function(){
// slickの処理
});
そもそもslickの読み込みコードの位置を変えたり、ブログの出力コードを$(window).load()
の中に記載したりといろいろ試し、最終的にあれslickのコード違う所に書く必要ないのではと思い至り今回のコードの書き方になりました。
所管
WP REST APIを初めて調べたのですが、便利すぎて驚きました。
色々な所でwpのデータが使えるようになるのは凄い。API便利。
APIを叩いて取得したデータを実際に利用したいと考えていたので丁度良い機会でした。
ただ、参考にさせて頂いたサイトのコードに、slickの設定を追加しただけなので、コードが本当にこれで最善の書き方になっているかは分からない..
Discussion