<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>axios | ばすにっきTips</title>
	<atom:link href="https://takabus.com/tips/tag/axios/feed/" rel="self" type="application/rss+xml" />
	<link>https://takabus.com/tips</link>
	<description>プログラミングやサーバー、日々のTipsをメモしています。</description>
	<lastBuildDate>Sat, 06 Aug 2022 14:07:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>https://takabus.com/tips/wp-content/uploads/2022/12/cropped-tips-1-32x32.png</url>
	<title>axios | ばすにっきTips</title>
	<link>https://takabus.com/tips</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPressの記事一覧をREST APIから取得してみる</title>
		<link>https://takabus.com/tips/1078/</link>
					<comments>https://takabus.com/tips/1078/#respond</comments>
		
		<dc:creator><![CDATA[ばすにっきTips]]></dc:creator>
		<pubDate>Tue, 01 Mar 2022 03:12:24 +0000</pubDate>
				<category><![CDATA[Vue.js]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[axios]]></category>
		<guid isPermaLink="false">https://takabus.com/tips/?p=1078</guid>

					<description><![CDATA[WordPressのREST APIから記事一覧を取得し、Vue.jsで表示するサンプルコードを紹介します。]]></description>
										<content:encoded><![CDATA[
<p>WordPressのREST APIから記事一覧を取得し、Vue.jsで表示するサンプルコードを紹介します。もちろんNuxt.jsでも使える方法です。</p>



<h2 class="wp-block-heading" id="サンプル">サンプル</h2>



<p>当サイト（ばすにっきTips）の新着記事を取得し、表示するサンプルです。</p>



<iframe src="https://codesandbox.io/embed/wordpress-restful-api-x-vue-js-3898c0?fontsize=14&amp;hidenavigation=1&amp;theme=dark" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;" title="WordPress RESTful API x Vue.js" allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"></iframe>



<p>Vue.jsとAxiosで実装してみました。</p>



<h2 class="wp-block-heading" id="解説">解説</h2>



<p>まず、axiosでAPIにアクセスし、データを取得しています。</p>



<pre class="wp-block-code"><code>// 最新記事を取得する
axios
  .get("https://takabus.com/tips/wp-json/wp/v2/posts?_embed")
  .then((res) =&gt; {
    this.posts = res.data;
  });</code></pre>



<p>最新の投稿は<code>/wp-json/wp/v2/posts?_embed</code>からGETで取得できます。</p>



<p>例えば、hoge.comにwordpressのトップがあるとすると、<code>hoge.com/wp-json/wp/v2/posts?_embed</code>がAPIとなります。ブラウザからアクセスして確認してみましょう。URLと一緒にクエリパラメーターを追加することで、カテゴリ（<code>?categories</code>）やタグ（<code>?tags</code>）で絞り込んだりといったこともできます。</p>



<p>このほか多くのパラメーターが準備されており、かなり細かい指定が可能となっているようです。</p>




<a rel="noopener" href="https://developer.wordpress.org/rest-api/reference/posts/#arguments" title="Posts – REST API Handbook | Developer.WordPress.org" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Posts – REST API Handbook | Developer.WordPress.org</div><div class="blogcard-snippet external-blogcard-snippet">Schema</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://developer.wordpress.org/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">developer.wordpress.org</div></div></div></div></a>



<p>取得したデータはdataに置いておき、v-forで各記事へのリンクとサムネイル・タイトルなどを表示させています。</p>



<pre class="wp-block-code"><code>&lt;!-- 記事ごと --&gt;
&lt;a :href="post.link" v-for="post in posts" :key="post.id" style="text-decoration:none;color:#2c2c2c;"&gt;
    &lt;div class="card" style="max-width: 540px;"&gt;
        &lt;div class="row g-0"&gt;
            &lt;div class="col-4"&gt;
                &lt;img class="d-block w-100"
                    :src="post._embedded&#91;'wp:featuredmedia']&#91;0].media_details.sizes.thumb320.source_url"
                    alt="..." /&gt;
            &lt;/div&gt;
            &lt;div class="col-8"&gt;
                &lt;div class="card-body p-2"&gt;
                    &lt;h6 class="card-title mb-0"&gt;{{post.title.rendered}}&lt;/h6&gt;
                    &lt;div&gt;
                        &lt;small&gt;{{post.date.substr(0,10)}}&lt;/small&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/a&gt;</code></pre>



<p>余分なクラスやスタイルを取り払うとこんな感じとなります。</p>



<pre class="wp-block-code"><code>&lt;a :href="post.link" v-for="post in posts" :key="post.id"&gt;
    &lt;div&gt;
    &lt;img :src="post._embedded&#91;'wp:featuredmedia']&#91;0].media_details.sizes.thumb320.source_url" /&gt;
    &lt;h6&gt;{{post.title.rendered}}&lt;/h6&gt;
    &lt;small&gt;{{post.date.substr(0,10)}}&lt;/small&gt;
    &lt;/div&gt;
&lt;/a&gt;</code></pre>



<p>よくつかうであろうキーは以下のとおりです。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>JSONのキー</th></tr></thead><tbody><tr><td>記事のタイトル</td><td>post.title.rendered</td></tr><tr><td>記事の投稿日時</td><td>post.date</td></tr><tr><td>サムネイル画像のURL<br>(320px)</td><td>post._embedded.wp:featuredmedia[0].media_details.sizes.thumb320.source_url</td></tr></tbody></table></figure>



<p>なお、サムネイル画像は<code>?_embed</code>をつけないと取得できません。</p>



<h2 class="wp-block-heading" id="まとめ">まとめ</h2>



<p>WordPressサイトの記事一覧をほかのサイトに埋め込みたいときなどに便利そうですね。例えばWebアプリのお知らせサイトをWordPressで制作し、Webアプリ内にお知らせを埋め込む、なんて使い方が考えられます。</p>



<p>▼こちらのURLで実際に運用しているサンプルも公開しています。Nuxt.jsを使用したサイトですが、記事内容はサーバーサイドレンダリング、新着記事のところは当記事の方法を使いクライアントサイドでレンダリングすることで、つねに最新の記事が表示される仕組みとなっています。実際のユースケースとして、参考にしていただければ幸いです。</p>



<figure class="wp-block-image size-large"><a href="https://takabus.com/buszukan/"><img fetchpriority="high" decoding="async" width="1024" height="465" src="https://takabus.com/tips/wp-content/uploads/2022/03/image-1024x465.png" alt="" class="wp-image-1096" srcset="https://takabus.com/tips/wp-content/uploads/2022/03/image-1024x465.png 1024w, https://takabus.com/tips/wp-content/uploads/2022/03/image-300x136.png 300w, https://takabus.com/tips/wp-content/uploads/2022/03/image-768x349.png 768w, https://takabus.com/tips/wp-content/uploads/2022/03/image.png 1195w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>




<a rel="noopener" href="https://takabus.com/buszukan/" title="バスずかん" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://takabus.com/buszukan/ogp.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">バスずかん</div><div class="blogcard-snippet external-blogcard-snippet">バスの写真をたくさん掲載！バスずかんでは仙台を中心としたバスの写真を掲載しています。バスにっきとあわせてごらんください。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://takabus.com/buszukan/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">takabus.com</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://takabus.com/tips/1078/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
