<?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>Bamboo Works（バンブーワークス）</title>
	<atom:link href="https://bambooworks.co/feed/" rel="self" type="application/rss+xml" />
	<link>https://bambooworks.co</link>
	<description>フリーランスWebディレクター柴田竹思の個人事務所『Bamboo Works（バンブーワークス）』。中小企業・個人事業主様向けにホームページの設計・制作、集客支援などのサービスをご提供しています。</description>
	<lastBuildDate>Thu, 31 Oct 2024 17:59:26 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://bambooworks.co/wp-content/uploads/2020/03/cropped-favicon-32x32.png</url>
	<title>Bamboo Works（バンブーワークス）</title>
	<link>https://bambooworks.co</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://bambooworks.co/feed/"/>
	<item>
		<title>SEO対策において、なぜキーワード選定が重要なのか？</title>
		<link>https://bambooworks.co/why-is-keyword-selection-important-in-seo/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Thu, 31 Oct 2024 17:44:05 +0000</pubDate>
				<category><![CDATA[Web集客]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4350</guid>

					<description><![CDATA[キーワード選定はSEOに取り組む上で、もっとも重要なプロセスです。 適切なキーワードを選定することで検索エンジン経由での新たな顧客獲得につながり、またそのジャンルにおける検索エンジンからの評価獲得にもつながります。 今回...]]></description>
										<content:encoded><![CDATA[<p>キーワード選定はSEOに取り組む上で、もっとも重要なプロセスです。</p>
<p>適切なキーワードを選定することで検索エンジン経由での新たな顧客獲得につながり、またそのジャンルにおける検索エンジンからの評価獲得にもつながります。</p>
<p>今回はSEO対策において、キーワード選定が重要である理由についてお伝えしていきます。</p>
<h2>キーワードを間違えると、すべて水の泡</h2>
<p>まずもっとも認識しておきたいのは、キーワード選定を間違えると、その後にいくら頑張っても水の泡になってしまうということです。</p>
<p>たとえば商品の固有名詞のような即購入につながりそうなキーワードであったとしても、商品がまったく認知されていなければ、検索エンジンに商品名を入力して検索する人はいませんよね？</p>
<p>なのでいくら商品名をキーワードとして狙って記事を書いても、期待するような成果にはつながりません。</p>
<p>また多くのページビュー（PV）を獲得できるキーワードがあったとして、そういうキーワードはほとんどの場合、競合他社も狙っています。</p>
<p>そうすると当然、SEOでの上位獲得の難易度が高くなるわけで、ここばかり攻めても思うような結果にはならないでしょう。</p>
<p>あと誤解しやすいのが、「とりあえずPVだけ稼げればいい」と考えてキーワードを選定してしまうことです。</p>
<p>自分の商品を売りたいのに、まったく関係ない芸能人のゴシップネタで人を集めても意味がありません。</p>
<p>あくまでも商品に関心がありそうな人を、できるだけたくさん集めること。</p>
<p>キーワード選定においては、その軸をぶらしてはいけません。</p>
<h2>理想の顧客に出会うための布石</h2>
<p>キーワードを選ぶということは、どんなお客さんと出会いたいかのメッセージと考えてください。</p>
<p>たとえばホームページ制作会社が集客するとして、「ホームページ制作　格安」みたいなキーワードでSEO対策をしたとします。</p>
<p>そうすると当然、出会えるお客さんは「お金をかけずにホームページを作りたい」と考えている人ということになります。</p>
<p>つまりお客さんのニーズとしては、集客力や成約率などのホームページのパフォーマンスよりも、制作費用や維持費をできるだけ抑えることの方が重要だと予想できます。</p>
<p>そのため、もしこのホームページ制作会社がパフォーマンスを重視した制作を強みとしている場合、どんなにSEOを頑張っても理想のお客さんに出会うことが難しくなってしまうのです。</p>
<p>そうならないためにも、キーワード選定を行う際には、自分にとっての理想の顧客像をイメージし、その人が求めているであろう情報とか、抱えている問題・課題について理解を深めていく必要があります。</p>
<p>そのプロセスを経てたどり着いたキーワードと、なんとなくツールを使って収集したキーワードとでは、手にできる成果は段違いになるはずです。</p>
<h2>ネットユーザーや検索エンジンからの認知獲得</h2>
<p>一定の方向性をもってキーワード選定ができると、ネットユーザーや検索エンジンから「〇〇のサイト」として認知を獲得することができます。</p>
<p>あなたも自分の悩み・解決したいことについてネットで調べていたら、とあるサイトのページをよく目にするということがあるのではないでしょうか？</p>
<p>そうすると、そのサイトに親近感を持ったり、好意的な印象を持ったりしますよね。</p>
<p>これはザイアンス効果（単純接触効果）や返報性の原理などが働くことが理由で、人間は接触回数が多いものに好感度や関心が高まり、また他者から施しを受けると何かお返しをしたい気持ちになるわけです。</p>
<p>キーワード選定がうまくできていると、商品に関心を持ちやすいユーザーと何回も接触することになり、それだけで親近感・好印象を持ってもらえるようになります。</p>
<p>その上で記事によって有益な情報の提供を繰り返すことで、何かお返しをしたいという気持ちが高まり、商品を購入してくれやすい関係性を築くことができるわけですね。</p>
<p>またキーワード選定に一貫性があると、検索エンジンはそのサイトの専門性を高く評価するようになります。</p>
<p>「E-E-A-T」という言葉を聞いたことがあるかもしれませんが、これは「Experience（経験）」「Expertise（専門性）」「Authoritativeness（権威性）」「Trustworthiness（信頼性）」のことで、検索エンジンがサイトの品質を評価する際の基準となるものです。</p>
<p>キーワードに一貫性があれば専門性の向上につながりますし、キーワードに沿ったコンテンツを実体験を交えて発信することで、経験の評価につながります。</p>
<p>そして自身の専門性と経験に基づいた情報発信を継続することで信頼性を獲得し、その積み重ねが、その分野における権威性を構築していきます。</p>
<p>つまり、E-E-A-Tのはじめの一歩は、キーワード選定にあると言えるわけですね。</p>
<h2>キーワード選定は適当にしないで</h2>
<p>SEO対策というと、活発な情報発信によって、とにかくPVを集めようという意識になってしまいがちです。</p>
<p>でもその方向性が間違っていると、すべての努力が無駄になってしまいます。</p>
<p>キーワード選定は、これから自分がどの方向に船を漕ぎ出すかと決める重要な作業です。</p>
<p>何となくの浅い想像で選ぶのではなく、顧客になるであろう人（＝自分の商品で問題解決できる人）の悩みや欲求を理解し、気持ちに寄り添った上でキーワードを選んでいくことが大切になります。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SEOキーワード選定をツールに依存すると失敗する理由</title>
		<link>https://bambooworks.co/why-keyword-tools-can-be-misleading/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Wed, 30 Oct 2024 16:03:07 +0000</pubDate>
				<category><![CDATA[Web集客]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4347</guid>

					<description><![CDATA[SEOキーワード選定には、キーワードプランナーやラッコキーワードなどのツールを使用することが多いと思います。 しかし、あまりツールに頼りすぎるのはおすすめできません。 今回は、SEOキーワード選定の際にツールに頼りすぎる...]]></description>
										<content:encoded><![CDATA[<p>SEOキーワード選定には、<a href="https://ads.google.com/intl/ja_jp/home/tools/keyword-planner/" rel="noopener" target="_blank">キーワードプランナー</a>や<a href="https://rakkokeyword.com/" rel="noopener" target="_blank">ラッコキーワード</a>などのツールを使用することが多いと思います。</p>
<p>しかし、あまりツールに頼りすぎるのはおすすめできません。</p>
<p>今回は、SEOキーワード選定の際にツールに頼りすぎるリスクと、それを回避して効果的にツールを活用する方法についてお伝えしたいと思います。</p>
<h2>キーワード選定ツールに依存するリスク</h2>
<p>キーワード選定ツールは月間検索ボリュームや競合の強さ、関連キーワードなどを一瞬で表示してくれる非常に便利なツールです。</p>
<p>ですがその反面、競合が少なく成約につながりやすい、いわゆる「お宝キーワード」を見つけるのには不向きだったりします。</p>
<p>そのもっとも大きな理由は、便利であるがゆえに思考が浅くなり、ついつい「売り手目線」でキーワードを探してしまいがちになるからです。</p>
<p>たとえば「スキンケア」でSEO対策する場合、あなたならどんなキーワードから手をつけるでしょうか？</p>
<p>おそらく「スキンケア」とか「化粧水」とか、パッと思いつくものから…　と考えたのではないでしょうか？</p>
<p>実はほとんどの人はそんな感じで、ツールの便利さに依存して選定の切り口が甘くなるのです。</p>
<p>そうなればいくらツールの機能がよかったとしても、吐き出されるリストは似通ったものとなるため、ライバルだらけの中で戦う羽目になるわけです。</p>
<h2>キーワード選定は買い手の思考から逆算して見つけ出す</h2>
<p>キーワード選定ツールを効果的に使うには、「成果の出るキーワードを見つける」というモチベーションではなく、「こんな悩みを抱えている人は、どんなキーワードで検索するだろう？」という切り口から深掘りしていくことがポイントです。</p>
<p>先ほどの「スキンケア」にしても、「悩み」を起点に考えると、必ずしも購買前提のキーワードで検索をかけるとは限らないことが見えてきます。</p>
<p>なぜなら肌の調子を改善する方法は、商品購入だけではないからです。</p>
<p>食べ物を変えるとか、生活習慣を見直すとか、そういうところからゴール（肌質改善）へアプローチすることだってできるわけです。</p>
<p>でも「売り手目線」で考えてしまうと、そういう悩み起点のキーワードに辿り着くのが難しくなります。</p>
<p>悩みを商品によって解決しようとする人と、それ以外の方法で解決する人では、後者の方は母数は大きくなります。</p>
<p>そこを取りこぼしてしまうのは、あまりにもったいないですよね。</p>
<p>もちろん売り手目線で考えたキーワードの方が購買意欲は高いので、少し導線を整えれば成約できるでしょう。</p>
<p>でもそういうキーワードは得てして競合が多く、SEOの難易度は高い傾向にあります。</p>
<p>対して悩み系キーワードは、すぐには購入につながらないかもしれないけど、SEOの難易度は比較的低いと言えます。</p>
<p>「悩みはあるけど、その商品の存在を知らない」という人なら、順を追って情報を提供していくことで、商品に関心を持ってもらえるかもしれません。</p>
<h2>SEOは「急がば回れ」が大事</h2>
<p>遠回りに思えるかもしれませんが、競合ひしめく難易度の高いキーワードを狙うより、実際には成果につながりやすいケースが少なくありません。</p>
<p>また何と言っても「売り手目線」ではツールを使ったとしても見つけられないキーワードで攻めていくので、競合が少なく、成果を安定的に積み上げていくこともできるわけです。</p>
<p>悩み起点でキーワードを掘り下げ、ごく基本的なSEO対策で小さな成果を積み上げていく。</p>
<p>この方法なら、時間はかかりますが、将来的には売上を安定させやすく、Googleのアルゴリズム変更にも影響を受けづらいホームページに育てることができるでしょう。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SEOキーワード選定の考え方【中小企業・個人事業主はこれだけやろう】</title>
		<link>https://bambooworks.co/keyword-research-for-small-business-owners/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Thu, 24 Oct 2024 14:11:42 +0000</pubDate>
				<category><![CDATA[Web集客]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4341</guid>

					<description><![CDATA[無料で取り組めるWeb集客法である、SEO対策。 中小企業や個人事業主の中にも、取り組んでいる方は大勢いるのではと思います。 しかし残念ながら、成果を出せているのはほんの一握りといった印象。 その原因の多くは、キーワード...]]></description>
										<content:encoded><![CDATA[<p>無料で取り組めるWeb集客法である、SEO対策。</p>
<p>中小企業や個人事業主の中にも、取り組んでいる方は大勢いるのではと思います。</p>
<p>しかし残念ながら、成果を出せているのはほんの一握りといった印象。</p>
<p>その原因の多くは、キーワード選定にあります。</p>
<p>今回は中小企業・個人事業主がSEOに取り組む上でありがちな間違いと、それを踏まえてのキーワード選定の方法についてお伝えしたいと思います。</p>
<h2>PVが増えれば売上があがる、とは限らない</h2>
<p>そもそもの話になってしまいますが、事業者がSEOに取り組むのは、突き詰めて言えば売上アップのためです。</p>
<p>売上アップのためには、できるだけたくさんのお客様がいた方がいい、だからホームページのPVを増やそう。</p>
<p>というわけでSEOに取り組むわけですが、実はここに落とし穴が潜んでいます。</p>
<p>たとえばあなたが女性向け基礎化粧品を販売している会社のSEO担当だったとして、どのようなキーワードで記事を書くでしょうか？</p>
<p>できるだけPVを増やしたければ、「スキンケア」とか「基礎化粧品」のような、月間検索ボリュームが大きいキーワード（ビッグキーワード）を狙おうと考えるかもしれません。</p>
<p>でもビッグキーワードの検索意図は、以下のようにバラバラです。</p>
<ul class="ul">
<li>効果的なスキンケアの方法を知りたい</li>
<li>自分に合った基礎化粧品を見つけたい</li>
<li>健康な肌を手に入れるための栄養素を知りたい</li>
<li>男性向けスキンケア用品を探している</li>
<li>スキンケアの手間を省きたい</li>
<li>スキンケア用品を収納するアイテムがほしい</li>
<li>目立つ毛穴をどうにかしたい</li>
</ul>
<p>女性向け基礎化粧品を販売したい場合、男性向け商品や収納アイテムを探している人を集めても、成果にはつながりづらいですよね。</p>
<p>キーワードが抽象的であるほど検索意図がぼやけるので、購買につなげるのは難しくなりますし、ものによってはどう頑張っても無理な場合もあります。</p>
<p>つまり闇雲にPVを増やせば売上があがる、というわけではないわけですね。</p>
<h2>SEOテクニックで勝とうとしない</h2>
<p>また、ビッグキーワードは狙っている競合サイトが多いため、上位を獲る難易度は高くなる傾向にあります。</p>
<p>しかもビッグキーワードで上位を獲るようなサイトにはSEOの専門家が関わっていたりするので、そういう人たちに真っ向勝負を挑むことになります。</p>
<p>X（旧Twitter）とかで検索してみると分かりますが、SEOの専門家って、本当に細部にまで気を配ってコンテンツを作ったり、サイト全体の設計をしたりしています。</p>
<p>それが仕事だから当たり前と言えばそれまでですが、問題はそのレベルの人に自分が勝てるのか？　ということです。</p>
<p>本来の仕事に加えて、プロレベルのSEOノウハウを身につけるなんて、現実的に考えて、まず無理じゃないでしょうか？</p>
<p>だったら、どうすればいいか？</p>
<p>答えは簡単で、そこで勝負をしなければいいわけです。</p>
<p>つまりSEOの専門家が、わざわざパイを取りに来ないキーワード（スモールキーワード）を狙うのです。</p>
<p>スモールキーワードは一般的に、検索ボリュームが小さい傾向にあります。</p>
<p>ですが複数の単語でキーワードが構成されるため、検索意図が把握しやすいという特徴があります。</p>
<p>スモールキーワードを狙ってコンテンツ（記事）を積み上げることで、結果的にPVを大きくすることもできますし、自社商品に検索意図がフィットしたキーワードを狙うことで、売上アップにもつなげられるわけです。</p>
<p>実際、僕が以前に運用支援していたサイト（スピリチュアル・占い系）では、上位表示できたのはスモールキーワードのみでしたが、月間PVは15万あり、月間の申し込み件数は平均20件ほどありました。</p>
<p>また定期的に、広告掲載の依頼が来たりもしていました（このサイトでは導線の邪魔になるので断ってましたが）。</p>
<p>わざわざ難易度の高いキーワードを獲りに行かなくても、スモールキーワードで十分、売上につなげられます。</p>
<h2>お客様のことだけ考えれば、お宝キーワードが見えてくる</h2>
<p>とはいえ、スモールキーワードなら何でもいいわけではありません。</p>
<p>やはり商品購買につながる検索意図のキーワードを中心に狙っていくわけですが、ここで問題になるのは、どんな検索意図なら購買につながりやすいのか？　ということです。</p>
<p>先に挙げたように明らかにズレた検索意図であれば分かりやすいのですが、実際にはそう単純なものばかりではありません。</p>
<p>攻めるべきスモールキーワードかを判断するには、購買する人＝お客様の気持ちをイメージできる必要があります。</p>
<p>お客様がどんなことに困っていて、どんな気持ちでいているのか？</p>
<p>それが分かるようになれば、お客様がどんなワードで検索するかを想像する精度が高くなっていきます。</p>
<p>実際、検索ユーザーは自分の気持ちや感情、悩みをそのまま検索窓に入力する傾向があります。</p>
<p>たとえばスキンケアであれば、「肌　汚い」とか「スキンケア　うまくいかない」などですね。</p>
<p>「スキンケア　おすすめ」などのすぐ思いつくキーワードは競合が多くなってしまいがちですが、お客様の気持ちを想像してたどり着いたキーワードは、ツールを使ったとしてもなかなか見つけることはできません。</p>
<p>お客様の気持ちをより深く理解できれば、そういう「お宝キーワード」に出会える確率が高くなるのです。</p>
<h2>SEOは基本かつ王道ノウハウさえあればいい</h2>
<p>お宝キーワードさえ見つかれば、高度なSEOテクニックを駆使しなくても、上位を獲得しやすくなります。</p>
<p>タイトルや見出しにキーワードを盛り込むとか、記事を検索意図に沿った内容にするなど、ごく基本的なSEOさえできれば大丈夫です。</p>
<p>なぜならお宝キーワードって、SEOのプロは狙っていないし、競合も多くない、成果は出やすいのに誰にも気づかれていないキーワードだからです。</p>
<p>中小企業・個人事業主がSEOで成果を出すには、このお宝キーワードをいかに見つけて、地道にコンテンツ（記事）を積み上げていくかにかかっています。</p>
<p>100万PVとか、大きな数字を目指す必要はありません。</p>
<p>もちろん業種にもよりますが、数万PVレベルでも十分な売上が出せることもあるので、ぜひお客様の気持ちからキーワードを見つけ出すアプローチを試してみていただければと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress運営会社AutomatticによるACF乗っ取り騒動まとめと今後の予想</title>
		<link>https://bambooworks.co/automattic-vs-wp-engine/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Wed, 16 Oct 2024 19:52:49 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4305</guid>

					<description><![CDATA[2024年9月下旬から、WordPressを運営しているAutomattic（オートマティック）の創業者Matt Mullenweg（マット・マレンウェッグ）氏と、WordPressに特化したホスティングサービスを提供す...]]></description>
										<content:encoded><![CDATA[<p>2024年9月下旬から、WordPressを運営しているAutomattic（オートマティック）の創業者Matt Mullenweg（マット・マレンウェッグ）氏と、WordPressに特化したホスティングサービスを提供するWP Engineとの間で騒動が起きている。</p>
<p>この騒動を受けて「WordPressが使えなくなるのでは？」「ACF（WP Engineは運営するWPプラグイン）が使えなくなるのでは？」などWordPressユーザーの間で不安の声が広がっている。</p>
<h2>WordPress騒動の時系列</h2>
<p>今回の騒動の時系列は、以下のような流れらしい。</p>
<ul class="ul">
<li>2024年9月21日にマット氏がWP Engineのやり方を批判する内容のポスト（<a href="https://wordpress.org/news/2024/09/wp-engine/" rel="noopener" target="_blank">WP Engine is not WordPress</a>）を公開。</li>
<li>2024年9月23日、WP Engineはポストの公開を中止するよう差し止め通知書を送付。</li>
<li>2024年9月25日、WordPress Foundationは<a href="https://wordpressfoundation.org/trademark-policy/" rel="noopener" target="_blank">商標ポリシー</a>の内容を変更し、WP Engineを名指しして批判。マット氏はWP Engineによる<a href="https://wordpress.org/" rel="noopener" target="_blank">WordPress.org</a>リソースへのアクセスを禁止（<a href="https://wordpress.org/news/2024/09/wp-engine-banned/" rel="noopener" target="_blank">WP Engine is banned from WordPress.org</a>）。これによりWP Engineの主要サービスの一つであるAdvanced Custom Fields（ACF）がWordPress公式ディレクトリから削除。WordPress管理画面からACFをアップデートできない事態に。</li>
<li>2024年9月27日、多くのユーザーから批判を受けたのか、WordPress.orgが10月1日までの一時措置としてWP Engineのアクセス禁止を解除（<a href="https://wordpress.org/news/2024/09/wp-engine-reprieve/" rel="noopener" target="_blank">WP Engine Reprieve</a>）。</li>
<li>2024年10月1日、WP EngineがXにて自社提供のプラグインやテーマについて、<a href="https://x.com/wpengine/status/1840910240801316924" rel="noopener" target="_blank">独自の解決策を展開した</a>とポスト。</li>
<li>2024年10月2日、WP EngineがAutomatticとマット氏を恐喝と権力乱用で告発。</li>
<li>2024年10月9日、マット氏はWordPress.orgのコントリビューターログイン画面にWP Engineの関係者でないことを確認するチェックボックスを設置（踏み絵）。これに多くのコントリビューターが反発。</li>
<li>2024年10月13日、WordPress.orgはACFをフォークして新しいプラグイン「Secure Custom Fields（SCF）」を作成したと発表。ACF乗っ取り完了（<a href="https://wordpress.org/news/2024/10/secure-custom-fields/" rel="noopener" target="_blank">Secure Custom Fields</a>）。</li>
</ul>
<h2>マット氏の主張</h2>
<ul class="ul">
<li>WP EngineがWordPressで得ている収益はAutomatticと同規模であるにもかかわらず、その貢献度はAutomatticと比べて1/100程度である。</li>
<li>WordPressはCMSであり、コンテンツは神聖なものである。そのため、すべてのコンテンツのリビジョン（更新履歴）は保存されるべき。しかしWP Engineは自社の利益のため、ユーザーのリビジョン機能を無効にしている。これによってWP Engineユーザー150万以上のWordPressでリビジョンが保存されないようになっている。</li>
<li>WP Engineが提供しているものはWordPressとは言えない。彼らが提供しているものはWordPressに似た安っぽい模造品であり、しかも本物より高額で提供している。これがWP EngineがWordPressにとっての「がん」である理由の一つで、放置しておくと「がん」と同じく転移する（追従する他社も現れる）ことを危惧している。</li>
<li>WP Engineとの訴訟問題が解決するまで、WP EngineがWordPress.orgのリソースにアクセスすることを禁止する。</li>
<li>WordPressはさまざまな機能を無料で提供しているが、WordPress.orgリソースにアクセスできないWP Engineは独自にそれらを用意しなければならない。またWordPressサイトが以前ほどハッキングされなくなったのは、ホスティング会社と協力して継続的にセキュリティを高める努力をしているからである。WP Engineに利益を貪られながら、これらのサービスを無料で彼らに提供する義理はない。</li>
<li>「WP」はWordPressの商標によってカバーされていないが、ユーザーを混乱させるような使い方をするべきではない。多くの人がWP Engineを「WordPress Engine」と勘違いし、WordPressと正式に提携していると誤解しているが、実際には何ら関係はない。彼らはWordPressによって数十億ドルの収益を上げているにもかかわらず、一度もWordPress Foundationに寄付したこともない。</li>
<li>WP Engineが今後もWordPressを利用した事業を継続したいなら、商標ライセンスを取得しなくてはいけない。</li>
</ul>
<h2>僕はわりとマット氏を支持</h2>
<p>ACFの公式ディレクトリからの削除＆乗っ取りという過激な対応をしたことでネガティブな反応が大きくなってしまったわけだが、個人的にはマット氏の主張は筋が通っているというか、心情が理解できる部分が多いと感じた。</p>
<p>自分たちが力を注いで開発してきたサービスにタダ乗りして、自分たち以上の利益を手にする奴がいれば面白くはないのは自然な感情だろうし、傍から見ていてもWP EngineのやっていることにWordPressへのリスペクトは感じられないように思う。</p>
<p>WordPressはGPLライセンスで公開されていて、商用利用や改変、再配布などが認められているものではある。</p>
<p>それを踏まえればWP Engineのやり方は誠意はなくともライセンスで認められている範囲内とも見れるし、だからこそマット氏は商標ライセンスを更新して、WP Engineの所業を「アウト」にしたかったんだと思う。</p>
<p>また、そもそもなぜWordPressがGPLライセンスで公開されているのかという話だが、もちろんそうすることでWordPressの発展が加速することを狙っている面もあると思う。</p>
<p>でもそれと同時に、WordPressというプラットフォームがあることで、「エンジニアやデザイナーの活躍の場が広がるように」というマット氏をはじめWordPress創業者たちの想いもあってのことだ。</p>
<p>だからWordPressを利用して仕事をしている世界中のデザイナーやエンジニアは、この素晴らしいソフトウェアが無償で公開されていることに感謝するべきだし、リスペクトをもって節度のある利用を心がけるべきだと思う。</p>
<p>だからもしWP Engineの振る舞いにWordPressへのリスペクトが感じられていたら、仮にWP Engineの収益がAutomatticのそれを上回っていたとしても、今回のような騒動には発展しなかったかもしれない。</p>
<p>X上ではどちらかと言うとマット氏への批判の声の方が大きいように感じるし、中にはマット氏の人格を否定するようなポストまであるが、調べるほどマット氏の抱えていたフラストレーションや今回の行動に至った経緯など（すべてに賛同するわけではないが）理解はできた。</p>
<h2>ACFは今後どうなるのか？</h2>
<p>マット氏がX上で燃え気味なのは、WP Engineと揉めていることよりも、ACFを公式ディレクトリから削除したことと、<a href="https://ma.tt/2024/10/alignment/" rel="noopener" target="_blank">Automattic社員の多数退職</a>、<a href="https://x.com/chribjel/status/1844010621593088315" rel="noopener" target="_blank">コントリビューターへの踏み絵</a>が大きいように思う。</p>
<p>実際にこれから、ある程度の期間はACF周りでゴタゴタすることもあるだろうし、社員やコントリビューターが離れたことでWordPressのアップデートが鈍化する可能性もある。</p>
<p>でも<a href="https://w3techs.com/technologies/overview/content_management" rel="noopener" target="_blank">インターネット上で40％以上のシェア</a>を誇るWordPressが近い未来に廃れていく姿は想像できないし、ACFに関しても個人的にはあまり心配していない。</p>
<p>ちなみに少し話は逸れるが、有料版のACF PROであれば、今回の公式ディレクトリ削除の影響はまったく受けない。</p>
<p>またACFは有料版でしか使えない機能こそ仕事でWeb制作する場合には便利なものが多いので、もし無料版で今後のアップデートに不安がある人はACF PROの利用を検討してみるのもいいかもしれない。</p>
<p>現時点ではACFからSCFに切り替わった直後のため、いろいろと軽微なバグはどうしても出ると思う。</p>
<p>でもこれについても、アップデートを繰り返すうちに改善されていくと予想している。</p>
<p>ちなみにマット氏は「今回の件とは無関係だけど」としつつ、『<a href="https://wordpress.org/news/2024/10/secure-custom-fields/" rel="noopener" target="_blank">Secure Custom Fields</a>』というポストの最後で以下のような発言をしている。</p>
<blockquote><p>There is separate, but not directly related news that Jason Bahl has left WP Engine to work for Automattic and will be making WPGraphQL a canonical community plugin. We expect others will follow as well.</p>
<p>以前WP Engineで働いていたJason Bahl（ジェイソン・バール）氏がAutomatticに移籍し、WPGraphQL を公式コミュニティプラグインにすることになった。他にも同じような動きがあるかもしれない。</p></blockquote>
<p>明言はしていないが、今後SCFにテコ入れしていくことを匂わせている、と見えなくもない。希望的観測だが。</p>
<p>そうなれば案外、ACFよりも充実した機能を有したプラグインになる可能性もなきにしもあらずである。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【WordPress】アーカイブページ（カテゴリー、タグ、月別アーカイブ、作成者、ターム、検索結果）のタイトルを表示する方法</title>
		<link>https://bambooworks.co/wordpress-archive-ttl/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Thu, 10 Oct 2024 03:53:04 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4294</guid>

					<description><![CDATA[WordPressでサイト構築していて地味に面倒なのが、以下のようなアーカイブページのタイトル表示です。 カテゴリーページ タグページ 月別アーカイブページ 作成者ページ タームページ 検索結果ページ archive.p...]]></description>
										<content:encoded><![CDATA[<p>WordPressでサイト構築していて地味に面倒なのが、以下のようなアーカイブページのタイトル表示です。</p>
<ul class="ul">
<li>カテゴリーページ</li>
<li>タグページ</li>
<li>月別アーカイブページ</li>
<li>作成者ページ</li>
<li>タームページ</li>
<li>検索結果ページ</li>
</ul>
<p>archive.phpとかでタイトル表示する共通の関数とかありそうなもんですが、探してみても見つからなかった記憶があります。</p>
<p>なので、個別に出力する必要があります。</p>
<h2>カテゴリータイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&lt;?php single_cat_title(); ?&gt;&lt;/h1&gt;</code></pre>
<p>以下のテンプレートファイルの、任意の箇所に記述してください。</p>
<ul class="ul">
<li>category.php</li>
<li>category-[カテゴリースラッグ].php</li>
<li>category-[カテゴリーID].php</li>
</ul>
<h2>タグタイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&lt;?php single_tag_title(); ?&gt;&lt;/h1&gt;</code></pre>
<p>以下のテンプレートファイルの、任意の箇所に記述してください。</p>
<ul class="ul">
<li>tag.php</li>
<li>tag-[タグスラッグ].php</li>
<li>tag-[タグID].php</li>
</ul>
<h2>月別アーカイブタイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&lt;?php echo get_the_date(&#039;Y年n月&#039;); ?&gt;の記事一覧&lt;/h1&gt;</code></pre>
<p>date.phpの任意の箇所に記述してください。</p>
<p>上記の例みたいに「〜の記事一覧」と付けておくと分かりやすいかもです。</p>
<h2>作成者ページタイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&lt;?php the_author(); ?&gt;が書いた記事一覧&lt;/h1&gt;</code></pre>
<p>以下のテンプレートファイルの、任意の箇所に記述してください。</p>
<ul class="ul">
<li>author.php</li>
<li>author-[ユーザー名].php</li>
<li>author-[ユーザーID].php</li>
</ul>
<p>こちらも例のように「〜が書いた記事一覧」などと書いておいた方が自然です。</p>
<h2>タームタイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&lt;?php single_term_title(); ?&gt;&lt;/h1&gt;</code></pre>
<p>以下のテンプレートファイルの、任意の箇所に記述してください。</p>
<ul class="ul">
<li>taxonomy.php</li>
<li>taxonomy-[タクソノミースラッグ].php</li>
<li>taxonomy-[タクソノミースラッグ]-[タームスラッグ].php</li>
</ul>
<h3>タクソノミーとタームについて</h3>
<p>タクソノミーとタームの関係は若干とっつきにくいかもしれませんが、これはWordPress標準の「カテゴリー」に置き換えて考えると分かりやすくなります。</p>
<p>標準のカテゴリーという仕組みは、まず「カテゴリー」という記事を区分するための大きな枠組みがありますよね。</p>
<p>そしてそのカテゴリーの中に、たとえば「Webデザイン」「コーディング」「ライティング」みたいな項目がある、みたいな構造になっています。</p>
<p>タクソノミーはここで言うところの「カテゴリー」、タームは「Webデザイン」「コーディング」「ライティング」などの各項目のことを指します。</p>
<h2>検索結果ページタイトルを表示する方法</h2>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;&#034;&lt;?php echo get_search_query(); ?&gt;&#034;の検索結果&lt;/h1&gt;</code></pre>
<p>search.phpの任意の箇所に記述してください。</p>
<p>こちらも「&#8221;〜&#8221;の検索結果」と付けておいた方が分かりやすいと思います。</p>
<h2>archive.phpで条件分岐させる方法</h2>
<p>ここまではアーカイブページの種類によってテンプレートファイルを分ける使い方を紹介しましたが、archive.phpにまとめることもできます。</p>
<p>各アーカイブページでデザインやレイアウトに大きな差異がない場合は、こちらの方法で実装した方が管理が楽だと思います。</p>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;
	&lt;?php if(is_category()): //カテゴリーページ ?&gt;
		&lt;?php single_cat_title(); ?&gt;
	&lt;?php elseif(is_tag()): //タグページ ?&gt;
		&lt;?php single_tag_title(); ?&gt;
	&lt;?php elseif(is_date()): //月別アーカイブページ ?&gt;
		&lt;?php echo get_the_date(&#039;Y年n月&#039;); ?&gt;の記事一覧
	&lt;?php elseif(is_author()): //作成者ページ ?&gt;
		&lt;?php the_author(); ?&gt;が書いた記事一覧
	&lt;?php elseif(is_tax(&#039;news&#039;)): //タクソノミー「news」ページ ?&gt;
		&lt;?php single_term_title(); ?&gt;
	&lt;?php endif; ?&gt;
&lt;/h1&gt;</code></pre>
<p>なお、検索結果ページにはarchive.phpは適用されません。</p>
<p>そのためアーカイブページのテンプレートファイルをまとめたい場合でも、search.phpは別個に用意する必要があります。</p>
<p>もしくはタイトル部分のソースコードだけ別パーツにしておき、archive.phpとsearch.phpのそれぞれからget_template_part()関数で呼び出す形にしておくと多少管理しやすくなるかと思います。</p>
<p>その場合は、以下のような感じで一緒くたに書いてしまって大丈夫（なはず）です。</p>
<pre><code class="language-php" data-line="">&lt;h1 class=&quot;archive_ttl&quot;&gt;
	&lt;?php if(is_category()): //カテゴリーページ ?&gt;
		&lt;?php single_cat_title(); ?&gt;
	&lt;?php elseif(is_tag()): //タグページ ?&gt;
		&lt;?php single_tag_title(); ?&gt;
	&lt;?php elseif(is_date()): //月別アーカイブページ ?&gt;
		&lt;?php echo get_the_date(&#039;Y年n月&#039;); ?&gt;の記事一覧
	&lt;?php elseif(is_author()): //作成者ページ ?&gt;
		&lt;?php the_author(); ?&gt;が書いた記事一覧
	&lt;?php elseif(is_tax(&#039;news&#039;)): //タクソノミー「news」ページ ?&gt;
		&lt;?php single_term_title(); ?&gt;
	&lt;?php elseif(is_search()): //検索結果ページ ?&gt;
		&#034;&lt;?php echo get_search_query(); ?&gt;&#034;の検索結果
	&lt;?php endif; ?&gt;
&lt;/h1&gt;</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ローディングアニメーションを初回アクセスのみ表示する</title>
		<link>https://bambooworks.co/loading-animation-only-once/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Wed, 09 Oct 2024 09:08:57 +0000</pubDate>
				<category><![CDATA[フロントエンド]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4290</guid>

					<description><![CDATA[トップページにアクセスするとローディングアニメーションが表示されるサイトってありますが、トップページを開く度に再生されるとだいぶ鬱陶しいです。 そのため、初回アクセス時だけアニメーションを表示させ、2回目以降は省略するよ...]]></description>
										<content:encoded><![CDATA[<p>トップページにアクセスするとローディングアニメーションが表示されるサイトってありますが、トップページを開く度に再生されるとだいぶ鬱陶しいです。</p>
<p>そのため、初回アクセス時だけアニメーションを表示させ、2回目以降は省略するようにするのがおすすめです。</p>
<p>今回はsessionStorageを利用して2回目以降のアクセス時にはアニメーションを省略する方法のメモ。</p>
<pre><code class="language-javascript" data-line="">//2回目以降のアクセスではローディングアニメーションを省略
jQuery(function($) {
	let webStorage = function () {
		if (sessionStorage.getItem(&#039;access&#039;)) {
			//2回目以降のアクセス（sessionStorageにデータがある場合）
			$(&#039;#body&#039;).addClass(&#039;onwards&#039;);
		} else {
			//初回アクセス（sessionStorageにデータを保存する）
			sessionStorage.setItem(&#039;access&#039;, &#039;true&#039;);
		}
	}
	webStorage();
});</code></pre>
<p>sessionStorageはブラウザにデータを保存しておける仕組みです。</p>
<p>上記ソースコードでは初回アクセス時にsessionStorageにデータを保存し、データの有無で初回か否かを判別しています。</p>
<ul class="ul">
<li>sessionStorageにデータがない＝初回アクセス</li>
<li>sessionStorageにデータがある＝2回目以降のアクセス</li>
</ul>
<p>データの保存期間はブラウザを閉じるまでなので、ブラウザを一旦閉じて再度アクセスすれば、またローディングアニメーションが再生されます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>段組みしたコンテンツを階段状にずらして並べる方法</title>
		<link>https://bambooworks.co/stepwise-column-layout/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Tue, 08 Oct 2024 10:02:37 +0000</pubDate>
				<category><![CDATA[フロントエンド]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=2811</guid>

					<description><![CDATA[段組みしたコンテンツを階段状にずらして並べるレイアウトってありますよね。 目線を誘導したりするのに便利なので僕もたまに使うのですが、今回はその階段状レイアウトを簡単に実装する方法についてご紹介します。 段組みしたコンテン...]]></description>
										<content:encoded><![CDATA[<p>段組みしたコンテンツを階段状にずらして並べるレイアウトってありますよね。</p>
<p>目線を誘導したりするのに便利なので僕もたまに使うのですが、今回はその階段状レイアウトを簡単に実装する方法についてご紹介します。</p>
<h2>段組みしたコンテンツを階段状にずらして並べる方法</h2>
<p>3段で並べる場合は、以下のようにします。</p>
<dl>
<dt>HTML</dt>
<dd>
<pre><code class="language-html" data-line="">&lt;div id=&quot;container&quot;&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>
</dd>
</dl>
<dl>
<dt>CSS</dt>
<dd>
<pre><code class="language-css" data-line="">#container {
	display: flex;
	flex-wrap: wrap;
	column-gap: 5%;
}

.box {
	width: 30%;
}

.box:nth-child(3n+2) {
	margin-top: 50px;
}

.box:nth-child(3n+3) {
	margin-top: 100px;
}</code></pre>
</dd>
</dl>
<p>左から順に、50pxずつズレて階段状に並びます。</p>
<p>ポイントはnth-childの指定で、3段に並べた2段目なら3n+2、3段目なら3n+3と指定します。</p>
<h2>4段で階段状に並べてみる</h2>
<p>4段に並べたい場合も、同じ要領で以下のようにします。</p>
<dl>
<dt>HTML</dt>
<dd>
<pre><code class="language-html" data-line="">&lt;div id=&quot;container&quot;&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
	&lt;div class&quot;box&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>
</dd>
</dl>
<dl>
<dt>CSS</dt>
<dd>
<pre><code class="language-css" data-line="">#container {
	display: flex;
	flex-wrap: wrap;
	column-gap: 4%;
}

.box {
	width: 22%;
}

.box:nth-child(4n+2) {
	margin-top: 50px;
}

.box:nth-child(4n+3) {
	margin-top: 100px;
}

.box:nth-child(4n+4) {
	margin-top: 150px;
}</code></pre>
</dd>
</dl>
<h2>まとめ</h2>
<p>以上、段組みしたコンテンツを階段状にずらして並べる方法でした。</p>
<p>この方法であれば、コンテンツの件数が不特定でも自動で回り込んで階段状に並んでくれるので便利です。</p>
<p>使える場面は結構あると思うので、応用しつついろいろ試してみてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【WordPress条件分岐タグ】ページごとに読み込むCSS・JSファイルを切り替える方法</title>
		<link>https://bambooworks.co/conditional-tags-css-js/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Tue, 08 Oct 2024 09:28:21 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4280</guid>

					<description><![CDATA[Webサイトを構築する際、トップページと下層ページで読み込ませるCSSやJSを分けたい、というようなケースがあります。 WordPressでは条件分岐タグを利用することで、ページごとに読み込ませるファイルを切り替えること...]]></description>
										<content:encoded><![CDATA[<p>Webサイトを構築する際、トップページと下層ページで読み込ませるCSSやJSを分けたい、というようなケースがあります。</p>
<p>WordPressでは条件分岐タグを利用することで、ページごとに読み込ませるファイルを切り替えることができます。</p>
<p>今回はCSS/JSを切り替える際によくある条件分岐パターンについてまとめてみました。</p>
<h2>WordPressでページごとに読み込むCSS・JSファイルを切り替える方法</h2>
<p>前提として、今回の記述例ではWordPressの設定が以下のようになっています。</p>
<p>ダッシュボード「設定→表示設定→ホームページの表示」で「固定ページ」を選択<br />
カスタム投稿タイプ「custom」を作成し、「custom」のカテゴリー管理のためカスタムタクソノミー「custom_tax」を作成・使用</p>
<pre><code class="language-php" data-line="">	&lt;!-- ここからCSSの読み込み --&gt;
	&lt;!-- 条件分岐の前に全ページ共有のCSSを読み込んでおく --&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/common.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php if( is_front_page() &amp;&amp; is_page() ): //フロントページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/front.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_page(&#039;about&#039;) ): //スラッグが「about」の固定ページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/about.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_page(&#039;contact&#039;) ): //スラッグが「contact」の固定ページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/contact.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_post_type_archive(&#039;custom&#039;) || is_tax(&#039;custom_tax&#039;) ): //カスタム投稿タイプ「custom」のアーカイブページ＆カスタムタクソノミー「custom_tax」ページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/custom.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_singular(&#039;custom&#039;) ): //カスタム投稿タイプ「custom」のシングルページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/custom-single.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_home() || is_post_type_archive(&#039;post&#039;) || is_category() || is_tag() || is_date() || is_search() ): //投稿アーカイブページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/archive.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_singular(&#039;post&#039;) || is_404() ): //投稿シングルページ＆404ページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/single.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php endif; ?&gt;

	&lt;!-- ここからJSの読み込み --&gt;
	&lt;!-- 条件分岐の前に全ページ共有のJSを読み込んでおく --&gt;
	&lt;script src=&quot;https://code.jquery.com/jquery-3.7.1.min.js&quot; integrity=&quot;sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;
	&lt;script defer type=&quot;text/javascript&quot; src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.5.2/jquery-migrate.min.js&quot;&gt;&lt;/script&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/common.js&quot;&gt;&lt;/script&gt;
	
&lt;?php if( is_front_page() &amp;&amp; is_page() ): //フロントページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/front.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_page(&#039;about&#039;) ): //スラッグが「about」の固定ページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/about.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_page(&#039;contact&#039;) ): //スラッグが「contact」の固定ページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/contact.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_post_type_archive(&#039;custom&#039;) || is_tax(&#039;custom_tax&#039;) ): //カスタム投稿タイプ「custom」のアーカイブページ＆カスタムタクソノミー「custom_tax」ページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/custom.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_singular(&#039;custom&#039;) ): //カスタム投稿タイプ「custom」のシングルページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/custom-single.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_home() || is_post_type_archive(&#039;post&#039;) || is_category() || is_tag() || is_date() || is_search() ): //投稿アーカイブページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/archive.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_singular(&#039;post&#039;) || is_404() ): //投稿シングルページ＆404ページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/single.js&quot;&gt;&lt;/script&gt;
&lt;?php endif; ?&gt;</code></pre>
<p>ダッシュボード「設定→表示設定→ホームページの表示」で「最新の投稿」を選択した場合は、4・5行目は以下のように記述しても大丈夫です。</p>
<pre><code class="language-php" data-line="">&lt;?php if( is_front_page() || is_home() ): //フロントページまたはブログ投稿インデックスページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/front.css&quot; rel=&quot;stylesheet&quot; /&gt;</code></pre>
<h2>WordPressデフォルトのjQueryを利用する場合の注意点</h2>
<p>上記の記述例ではWordPressデフォルトのjQueryは使用せず、別途CDNで読み込んでいます。</p>
<p>デフォルトjQueryを使用する場合は、上記の記述例よりも先にwp_head()関数を記述するようにしてください。</p>
<pre><code class="language-php" data-line="">&lt;?php wp_head(); //先にデフォルトのjQueryとプラグイン用CSSを読み込んでおく ?&gt;

	&lt;!-- ここからCSSの読み込み --&gt;
	&lt;!-- 条件分岐の前に全ページ共有のCSSを読み込んでおく --&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/common.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php if( is_front_page() &amp;&amp; is_page() ): //フロントページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/front.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;?php elseif( is_page(&#039;about&#039;) ): //スラッグが「about」の固定ページ ?&gt;
	&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/about.css&quot; rel=&quot;stylesheet&quot; /&gt;

...

	&lt;!-- ここからJSの読み込み --&gt;
	&lt;!-- 条件分岐の前に全ページ共有のJSを読み込んでおく --&gt;
	&lt;script src=&quot;https://code.jquery.com/jquery-3.7.1.min.js&quot; integrity=&quot;sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;
	&lt;script defer type=&quot;text/javascript&quot; src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.5.2/jquery-migrate.min.js&quot;&gt;&lt;/script&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/common.js&quot;&gt;&lt;/script&gt;
	
&lt;?php if( is_front_page() &amp;&amp; is_page() ): //フロントページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/front.js&quot;&gt;&lt;/script&gt;
&lt;?php elseif( is_page(&#039;about&#039;) ): //スラッグが「about」の固定ページ ?&gt;
	&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/about.js&quot;&gt;&lt;/script&gt;

...

</code></pre>
<dl>
<dt>wp_head()関数とは？</dt>
<dd>WordPressサイトで、header要素内で使用するタグを出力するものです。<br />
WordPress本体に同梱されているjQueryのほか、各種プラグインで使用するCSS/JSもこの関数で読み込まれます。<br />
そのため自作のJSでjQueryに依存したソースコードがある場合、wp_head()関数より後で読み込まないと動作しません。</dd>
</dl>
<h2>固定ページスラッグを取得して自動でCSS/JSを読み込ませる方法</h2>
<p>上記の記述例では、固定ページのスラッグを個別に指定してCSS/JSを読み込んでいますが、固定ページの件数が増えてくると個別に分岐させるのが手間になってきます。</p>
<p>その場合は固定ページのスラッグを取得して、自動でCSS/JSが読み込まれるようにしておくと便利です。</p>
<pre><code class="language-php" data-line="">&lt;?php if( is_page() ): //固定ページのスラッグ取得 ?&gt;
	&lt;?php $page = get_post( get_the_ID() ); $slug = $page-&gt;post_name; ?&gt;
&lt;?php endif; ?&gt;

&lt;link href=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/css/&lt;?php echo $slug; ?&gt;.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;script src=&quot;&lt;?php echo get_template_directory_uri(); ?&gt;/assets/js/&lt;?php echo $slug; ?&gt;.js&quot;&gt;&lt;/script&gt;</code></pre>
<h2>公式テーマに登録する場合は使えません</h2>
<p>以上、条件分岐タグを使ってページごとに読み込むCSS・JSファイルを切り替える方法でした。</p>
<p>ちなみにこの方法は公式テーマでは使用できません（審査で落とされます）。</p>
<p>公式テーマに登録したい場合は、functions.phpの方で読み込むCSS/JSを管理するようにしましょう。</p>
<p>とはいえクライアント案件などではfunctions.phpより条件分岐タグで切り替えた方が使い勝手はいいと思います。</p>
<p>制作内容によって適切な方法を選択して実装してみてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressの表示設定「ホームページの表示」と適用されるテンプレートファイルについての検証</title>
		<link>https://bambooworks.co/options-reading-template-file/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Sun, 06 Oct 2024 10:54:39 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=4065</guid>

					<description><![CDATA[WordPressのダッシュボードにある「設定→表示設定→ホームページの表示」というブロックで、トップページに「最新の投稿」か「固定ページ」のどちらを設定するか選択できます。 ここの設定次第でトップページにfront-p...]]></description>
										<content:encoded><![CDATA[<p>WordPressのダッシュボードにある「設定→表示設定→ホームページの表示」というブロックで、トップページに「最新の投稿」か「固定ページ」のどちらを設定するか選択できます。</p>
<p>ここの設定次第でトップページにfront-page.phpかhome.php、どちらのテンプレートファイルが適用されるか変わるわけですが、今回はどう設定すればどちらのテンプレートファイルが適用されるのかについてまとめてみました。</p>
<h2>テンプレートファイルの優先順位</h2>
<p>WordPressサイトのトップページには、最新の記事一覧か、任意の固定ページを設定することができます。</p>
<p>どちらの場合でも、使っているWordPressテーマにfront-page.phpというテンプレートファイルがあれば、それが適用されます。</p>
<p>もしテーマにfront-page.phpがない場合には、以下のような優先度で代わりのテンプレートファイルが適用されるようになっています。</p>
<dl>
<dt>ホームページの表示で「最新の投稿」を設定している場合</dt>
<dd>
<ol class="ol">
<li>front-page.php</li>
<li>home.php</li>
<li>index.php</li>
</ol>
</dd>
</dl>
<dl>
<dt>ホームページの表示で「固定ページ」を設定している場合</dt>
<dd>
<ol class="ol">
<li>front-page.php</li>
<li>page-（固定ページのスラッグ）.php</li>
<li>page-（固定ページのID）.php</li>
<li>page.php</li>
<li>singular.php</li>
<li>index.php</li>
</ol>
</dd>
</dl>
<p>以下に「設定→表示設定→ホームページの表示」での設定によって、適用されるテンプレートファイルがどう変わるのかについてまとめます。</p>
<p>なおWordpressの表示設定では、サイトのトップページを「ホームページ」、ブログなどの記事一覧ページのことを「投稿ページ」と表現しています。</p>
<p>ここではそれに倣って記載するので、以下の認識でお願いします。</p>
<ul class="ul">
<li>「ホームページ」はサイト全体のことではなく、「投稿ページ」は記事ページ（シングルページ）のことではない</li>
<li>「ホームページ」はサイトのトップページ、「投稿ページ」はブログトップ（最新の記事一覧ページ）のことである</li>
</ul>
<h2>「表示設定→ホームページの表示」と適用されるテンプレートファイル</h2>
<h3>1.ホームページの表示で「最新の投稿」を選択した場合</h3>
<p><img fetchpriority="high" decoding="async" src="https://bambooworks.co/wp-content/uploads/2024/10/01.png" alt="1.ホームページの表示で「最新の投稿」を選択した場合" width="523" height="260" class="alignnone size-full wp-image-4068" srcset="https://bambooworks.co/wp-content/uploads/2024/10/01.png 523w, https://bambooworks.co/wp-content/uploads/2024/10/01-300x149.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>ホームページにはfront-page.phpが適用されます。</p>
<p>テーマ内にfront-page.phpがない場合は、home.php → index.phpの順で適用されます。</p>
<h3>2.ホームページの表示で「固定ページ」を選択し、ホームページ・投稿ページともに未設定の場合</h3>
<p><img decoding="async" src="https://bambooworks.co/wp-content/uploads/2024/10/02.png" alt="2.ホームページの表示で「固定ページ」を選択し、ホームページ・投稿ページともに未設定の場合" width="523" height="260" class="alignnone size-full wp-image-4069" srcset="https://bambooworks.co/wp-content/uploads/2024/10/02.png 523w, https://bambooworks.co/wp-content/uploads/2024/10/02-300x149.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>これはどうなるのか知りたくて試してみたのですが、結果、設定できませんでした。</p>
<p>未設定の状態で保存しようとすると、ホームページの表示が「最新の投稿」に変更されて保存されます。</p>
<h3>3.ホームページの表示で「固定ページ」を選択し、ホームページに任意の固定ページを設定、投稿ページを未設定の場合</h3>
<p><img decoding="async" src="https://bambooworks.co/wp-content/uploads/2024/10/03.png" alt="3.ホームページの表示で「固定ページ」を選択し、ホームページに任意の固定ページを設定、投稿ページを未設定の場合" width="523" height="260" class="alignnone size-full wp-image-4071" srcset="https://bambooworks.co/wp-content/uploads/2024/10/03.png 523w, https://bambooworks.co/wp-content/uploads/2024/10/03-300x149.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>ホームページにはfront-page.phpが適用されます。</p>
<p>また投稿ページは出力されません。</p>
<p>コーポレートサイトなどで固定ページのみで管理できる場合は、この設定にしておくといいかもしれません。</p>
<h3>4.ホームページの表示で「固定ページ」を選択し、ホームページを未設定、投稿ページに任意の固定ページを設定の場合</h3>
<p><img decoding="async" src="https://bambooworks.co/wp-content/uploads/2024/10/04.png" alt="4.ホームページの表示で「固定ページ」を選択し、ホームページを未設定、投稿ページに任意の固定ページを設定の場合" width="523" height="260" class="alignnone size-full wp-image-4072" srcset="https://bambooworks.co/wp-content/uploads/2024/10/04.png 523w, https://bambooworks.co/wp-content/uploads/2024/10/04-300x149.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>ホームページにはhome.phpが適用されます。</p>
<p>ホームページに最新の投稿が表示されるので、ホームページの表示で「最新の投稿」を選択した場合とサイト構造としては同じです。</p>
<p>でもホームページの表示が「最新の投稿」の場合はfront-page.phpでが適用されるので、何らかの理由でhome.phpを適用させたい場合はこの設定にするとよさそうです。</p>
<h3>5.ホームページの表示で「固定ページ」を選択し、ホームページ・投稿ページともに任意の固定ページを設定の場合</h3>
<p><img decoding="async" src="https://bambooworks.co/wp-content/uploads/2024/10/05.png" alt="5.ホームページの表示で「固定ページ」を選択し、ホームページ・投稿ページともに任意の固定ページを設定の場合" width="523" height="260" class="alignnone size-full wp-image-4073" srcset="https://bambooworks.co/wp-content/uploads/2024/10/05.png 523w, https://bambooworks.co/wp-content/uploads/2024/10/05-300x149.png 300w" sizes="(max-width: 523px) 100vw, 523px" /></p>
<p>ホームページにはfront-page.phpが適用されます。</p>
<p>テーマ内にfront-page.phpがない場合は、page-（固定ページのスラッグ）.php → page-（固定ページのID）.php → page.php → singular.php → index.phpの順で適用されます。</p>
<h2>まとめ</h2>
<p>以上、WordPress表示設定と、適用されるテンプレートファイルについてでした。</p>
<p>ちょっと大雑把な言い方になってしまいますが、そのWordPressサイトを「ブログ」として構築したいのか「ホームページ」として構築したいのかによって、適切な表示設定が変わります。</p>
<p>ブログの場合は基本的に「最新の投稿（上記の1）」、ホームページの場合は「固定ページ（上記の3・5）」で、ブログだけどトップページを固定ページとして管理したい場合は上記4の設定にしておくといいのではと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>input[type=&#8221;file&#8221;]でアップロードした画像をプレビュー表示する方法</title>
		<link>https://bambooworks.co/input-type-file-upload-preview/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Thu, 03 Oct 2024 14:04:51 +0000</pubDate>
				<category><![CDATA[フロントエンド]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=3995</guid>

					<description><![CDATA[Webサービスのプロフィール編集画面などで、プロフィール画像をアップロードするとプレビュー表示される機能ってあると思いますが、それの実装方法のメモ。 HTML &#60;div id=&#34;icon_box&#038;quot...]]></description>
										<content:encoded><![CDATA[<p>Webサービスのプロフィール編集画面などで、プロフィール画像をアップロードするとプレビュー表示される機能ってあると思いますが、それの実装方法のメモ。</p>
<h2>HTML</h2>
<pre><code class="language-html" data-line="">&lt;div id=&quot;icon_box&quot;&gt;
	&lt;div id=&quot;upload_img&quot;&gt;
		&lt;div class=&quot;img&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div id=&quot;upload_btn&quot;&gt;
		&lt;label&gt;
			&lt;input type=&quot;file&quot; accept=&quot;.png, .jpg, .jpeg, .gif&quot; onchange=&quot;uploadImage(this);&quot;/&gt;
		&lt;/label&gt;
	&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>今回はアップロードされた画像が #upload_img > .img の背景画像として表示されるようにします。</p>
<h2>CSS</h2>
<pre><code class="language-css" data-line="">#icon_box {
	background: #eee;
	padding: 32px 24px 24px;
	border-radius: 8px;
	width: 100%;
	display: flex;
	flex-direction: column;
	align-items: center;
}

#upload_img {
	width: 120px;
	border-radius: 50%;
	overflow: hidden;
	border: 1px solid #fff;
	margin-bottom: 16px;
}

#upload_img &gt; .img {
	display: block;
	position: relative;
	top: 0;
	left: 0;
	width: 100%;
	height: 0;
	padding-top: 100%;
	background: url(../images/avatar.png) no-repeat center center / cover;
}</code></pre>
<p>#upload_img > .imgには画像が未アップロード状態のときに表示される画像を設定しておくとよいと思います。</p>
<h2>JavaScript</h2>
<pre><code class="language-javascript" data-line="">function uploadImage(target) {
	let reader = new FileReader();
	reader.onload = function () {
		$upload_img = $(&quot;#upload_img &gt; .img&quot;);
		img = new Image();
		img.src = this.result;
		$upload_img.css(&quot;background-image&quot;, &quot;url(&quot; + this.result + &quot;)&quot;);
	}
	reader.readAsDataURL(target.files[0]);
}</code></pre>
<p>1行目で、input[type=&#8221;file&#8221;]のonchange属性（uploadImage）を関数に設定します。</p>
<p>4行目にはアップロードした画像を背景として表示する要素を指定してください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【WordPress】検索結果ページのパンくずリストに投稿ページ（記事一覧）の階層を追加する方法</title>
		<link>https://bambooworks.co/search-results-breadcrumbs/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Thu, 03 Oct 2024 09:12:58 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=3988</guid>

					<description><![CDATA[WordPressの検索結果ページにパンくずリストを設置すると、「トップページ > 検索結果ページ」という階層構造になります。 でもWordPressでコーポレートサイトなどを構築している場合は、「トップページ > ブロ...]]></description>
										<content:encoded><![CDATA[<p>WordPressの検索結果ページにパンくずリストを設置すると、「トップページ > 検索結果ページ」という階層構造になります。</p>
<p>でもWordPressでコーポレートサイトなどを構築している場合は、「トップページ > ブログ > 検索結果ページ」という感じで、トップページと検索結果ページの間に投稿ページ（記事一覧ページ、ブログトップページ）が入る方が構造的に自然かと思います。</p>
<p>パンくずリスト系のプラグイン（Breadcrumb NavXT）とかであれば設定画面からいじれそうだなと思っていましたが、案外できなかったのでfunctions.phpでカスタマイズしました。</p>
<h2>検索結果ページのパンくずリストに投稿ページ（記事一覧）の階層を追加する方法</h2>
<p>テーマのfunctuons.phpに以下を追記してください。</p>
<pre><code class="language-php" data-line="">/* 検索結果ページのパンくずリストにブログ（投稿ページ）という階層を追加
---------------------------------------------------------- */
function bcn_add($bcnObj) {
	if (is_search()) { //検索結果ページ
		$bcnObj-&gt;add(new bcn_breadcrumb(&#039;ブログ&#039;, null, array(&#039;archive&#039;), home_url(&#039;/blog/&#039;), null, true));
		$trail_tmp = clone $bcnObj-&gt;trail[1];
		$bcnObj-&gt;trail[1] = clone $bcnObj-&gt;trail[2];
		$bcnObj-&gt;trail[2] = $trail_tmp;    
	} 
	return $bcnObj;    
}
add_action(&#039;bcn_after_fill&#039;, &#039;bcn_add&#039;);</code></pre>
<p>4行目の「ブログ」はパンくずリストの階層として表示させたいテキスト、「/blog/」はそこからリンクさせたいURLのスラッグを指定します。</p>
<h2>検索結果ページのパンくずリストに投稿ページが表示されない理由</h2>
<p>ここからは余談ですが、WordPressサイトの検索結果ページで、なぜパンくずリストが「トップページ > 検索結果ページ」という構造になるのかについて。</p>
<p>これはしっかりリサーチした訳じゃなくて、僕の中で「おそらくこういうことだろう」と思っているという話なのですが、WordPressのデフォルトの構造が最新の投稿から一覧表示されるものになっているからではないかと思います。</p>
<p>つまりWordPressサイトのトップ＝ブログトップページ（最新の投稿が一覧表示されるページ）として運用するのが標準とされているため、パンくずリストも「トップページ > 検索結果ページ」となるわけです。</p>
<p>またWordPressサイトで記事検索をかけると投稿だけでなく固定ページも検索対象となりますが、これもWordPressをデフォルトの構造で運用するケースを想定しているからではないかと思われます。</p>
<p>ただ、WordPressを使ってコーポレートサイトのような設計のサイトを構築する場合は、トップページとブログトップは別個になっていて、検索結果から固定ページ（コーポレートサイトの下層ページ）は除外した方が都合がいいケースも少なくないです。</p>
<p>本来であればダッシュボードの「設定」→「表示設定」にある「ホームページの表示」で「固定ページ」を選択した場合は、階層構造も「トップページ > ブログ > 検索結果ページ」というようにトップページ（ホームページ）とブログ（投稿ページ）も階層化してくれればいいのですが、現状そうはなっていないので都度調整するしかなさそうです。</p>
<p>ちなみに検索対象から固定ページを除外する方法は、こちらの『<a href="https://bambooworks.co/wordpress-search-only-posts/">WordPressの検索で投稿のみを検索対象にする</a>』という記事で紹介していますので、合わせてどうぞ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【WordPress】未来の日付の投稿を公開状態にする方法</title>
		<link>https://bambooworks.co/future-date-publish/</link>
		
		<dc:creator><![CDATA[柴田 竹思]]></dc:creator>
		<pubDate>Wed, 02 Oct 2024 17:20:31 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://bambooworks.co/?p=3974</guid>

					<description><![CDATA[WordPressで構築しているサイトで、諸事情により未来の日付の投稿を公開状態にする必要があったため、その方法のメモ。 functions.phpに以下を追加します。 //未来の日付の投稿を公開にする function...]]></description>
										<content:encoded><![CDATA[<p>WordPressで構築しているサイトで、諸事情により未来の日付の投稿を公開状態にする必要があったため、その方法のメモ。</p>
<p>functions.phpに以下を追加します。</p>
<pre><code class="language-php" data-line="">//未来の日付の投稿を公開にする
function bw_wp_insert_post_data( $data ) {
	if ( $data[&#039;post_type&#039;] == &#039;guide&#039; &amp;&amp; $data[&#039;post_status&#039;] == &#039;future&#039; ){
		$data[&#039;post_status&#039;] = &#039;publish&#039;;
	}
	return $data;
};
add_filter( &#039;wp_insert_post_data&#039;, &#039;my_wp_insert_post_data&#039; );</code></pre>
<p>上記ソースコード追加以降、未来の日付で作成した投稿を公開状態にできるようになります。</p>
<p>すでに作成済みの投稿については、手動で公開にする必要があるので、そこだけ注意でお願いします。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
