WordPress + Nuxt.js でポートフォリオサイトを作る その1
WordPressサイト(http://works.yuheijotaki.com/)の REST API と Nuxt.js でポートフォリオサイトを作成する。その1
GitHub: https://github.com/yuheijotaki/works-nuxt
サイト構成
下記のシンプルな構成で行う
- トップページ (
/
)- Works一覧(クリックで詳細ページへ)
- カテゴリーごとの絞り込み機能
- Works詳細ページ (
/work/_slug.vue
)- サイト名などの情報、画面キャプチャ等
インストールと起動
# create-nuxt-app $ npx create-nuxt-app [ProjectFolderName]
# 起動 $ cd [ProjectFolderName] $ npm run dev
ページ/コンポーネント
root | └ pages/ | └ index.vue | └ work/ | └ _slug.vue └ components/ └ Logo.vue └ Filter.vue └ WorksList.vue └ WorksItem.vue └ WorksSingle.vue
スラッグベースのルーティング
前回もつまづきましたが、今回はWPの通常投稿をスラッグ形式でルーティングする。
エンドポイントは、 'https://hoge.com/wp-json/wp/v2/posts?slug=[SlugName]
となり、これを async asyncData( { params } ) {...
で取ってくる必要がある。
<template> <div> <WorksSingle :post="post" /> </div> </template> <script> import axios from 'axios' import WorksSingle from '~/components/WorksSingle.vue' export default { components: { WorksSingle }, data () { return { post: {} } }, async asyncData( { params } ) { const { data } = await axios.get('https://hoge.com/wp-json/wp/v2/posts?slug=' + params.slug) return { post: data[0] } } } </script>
参考:
- urls - How do you retrieve a post by slug name through REST API? - WordPress Development Stack Exchange
- Nuxt.jsにおけるaxios, asyncDataの使い方 | アールエフェクト
次回はカテゴリーごとの絞り込み機能を実装する。