質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1020閲覧

WordPress REST APIを用いたサムネイル表示バグの修正について

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/07/25 13:24

編集2023/07/26 07:30

実現したいこと

WordPressのサイトにて、特定のカスタム投稿タイプのアーカイブページ(archive-slugname.php)で、非同期による記事の絞り込みを実施しています。

・ACFプラグイン(カスタムフィールドプラグイン)を使用して、特定の投稿タイプ(今回は例として「applications」という投稿タイプ)にチェックボックスを設置します。
・このチェックボックスを各投稿に紐づけて公開します。
・フロントエンドでは、ユーザーがチェックボックスを選択すると、関連する記事が絞り込まれて表示されます。

前提

上記のようにチェックボックスをユーザーがクリックしてJavaScriptにより動的に記事を生成した際に、「サムネイルがうまく表示される投稿」と「サムネイルがうまく表示されない投稿」があることがわかりました。

つまりWPのアイキャッチのデータが取得できていないということになります。
カスタム投稿内の全ての投稿ではなく、取得できている投稿と取得できていない投稿があるという厄介な状態になっています。

しかしWPの管理画面から間違いなく投稿自体にはすべてアイキャッチが設定されていることを確認しました。

テンプレートのソースコードとJavaScriptのソースコードを添付するかどうかは迷いましたが、後述にも記載している通り、テンプレートソースには問題がない可能性が高いと考えられるため、一旦その詳細を省略させていただきます。
(もし不快に感じられたら申し訳ないです)

問題の原因の仮説

大まかな問題の原因として、JSONレスポンス内の "featured_media" キーの値が適切に取得できていないことが判明しました。

具体的には、サムネイルが正常に表示される投稿データと表示されない投稿データの中身を比較して確認しました。このデータはWordPressのローカル環境から取得したもので、具体的なURLや値はダミーに置き換えていますが、形式としては以下のようになります。

http://example.local/wp-json/wp/v2/applications/219?_embed

具体的には以下のエラーメッセージとなります。

発生している問題・エラーメッセージ

サムネイル表示がうまくいかなかった記事のデータ構造(json)

json

1{ 2 "id": 123, 3 "date": "2023-01-01T00:00:00", 4 "date_gmt": "2023-01-01T00:00:00", 5 "guid": { 6 "rendered": "http:\/\/example.local\/?post_type=applications&#038;p=123" 7 }, 8 "modified": "2023-01-01T00:00:00", 9 "modified_gmt": "2023-01-01T00:00:00", 10 "slug": "dummy-slug", 11 "status": "publish", 12 "type": "applications", 13 "link": "http:\/\/example.local\/applications\/dummy-slug\/", 14 "title": { 15 "rendered": "Dummy Title" 16 }, 17 "content": { 18 "rendered": "\n<p>Dummy content.<\/p>\n", 19 "protected": false 20 }, 21 "featured_media": 999, // ここが原因? 22 "template": "", 23 "acf": { 24 "applications_filter": ["dummy_category"], 25 "meta_description": "", 26 "applications_pick_up": true 27 }, 28 "_links": { 29 "self": [{ 30 "href": "http:\/\/example.local\/wp-json\/wp\/v2\/applications\/123" 31 }], 32 "collection": [{ 33 "href": "http:\/\/example.local\/wp-json\/wp\/v2\/applications" 34 }], 35 "about": [{ 36 "href": "http:\/\/example.local\/wp-json\/wp\/v2\/types\/applications" 37 }], 38 "wp:featuredmedia": [{ 39 "embeddable": true, 40 "href": "http:\/\/example.local\/wp-json\/wp\/v2\/media\/999" 41 }], 42 "wp:attachment": [{ 43 "href": "http:\/\/example.local\/wp-json\/wp\/v2\/media?parent=123" 44 }], 45 "curies": [{ 46 "name": "wp", 47 "href": "https:\/\/api.w.org\/{rel}", 48 "templated": true 49 }] 50 }, 51 "_embedded": { 52 "wp:featuredmedia": [{ 53 "code": "rest_forbidden", // ここが原因? 54 "message": "\u305d\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002", 55 "data": { 56 "status": 401 // ここが原因? 57 } 58 }] 59 } 60}

サムネイル表示がうまくいった記事のデータ構造(該当箇所以外省略)

メディアのidなどが正しく取得できていると思います。

json

1{ 2 "featured_media": 139, 3 "_embedded": { 4 "wp:featuredmedia": [ 5 { 6 "id": 139, 7 "media_type": "image" 8 // 中略 9 } 10 ] 11 } 12}

このURLを使用して取得したJSONデータ内の "featured_media" キーの値が、サムネイル表示の問題に直接関連していると考えています。

試したこと

以下の観点から、サムネイル表示が正常に動作する環境(環境A)と動作しない環境(環境B)の差分を検証しています。

・どちらの環境もWordPressのバージョンは最新の6.2.2で一致しています。
→ WordPressのバージョンが問題ではないと考えられます。

・どちらの環境も同じプラグインを使用しており、そのバージョンも一致しています。
→ WordPressのプラグインのバージョンが問題ではないと考えられます。

・管理画面の設定(一般設定やパーマリンク設定)も一致しています。
→ 完全に見逃しがないとは断言できませんが、設定は同一にしています。特にパーマリンクの設定も全く同じです。

・環境Bのテーマデータ(wp-content/themes/自作テーマデータ)を環境Aに上書きしても、サムネイルは正常に表示されます。
→ JavaScriptやPHPのテンプレートファイルの記述ミスではない可能性が高いです。また、ソースコード自体には問題がない可能性が高いです。つまり、テーマデータ自体は問題の原因ではないと考えています。

・アイキャッチ画像が表示されなかった投稿に別のアイキャッチ画像を再度添付し直した結果、絞り込み後にその投稿にアイキャッチが適切に表示された
→ 使えない画像 or 画像のデータ自体に何か問題があるのか・・・?(画像はすべて.webpです)

・画像拡張子を.webpから.pngに変換したころうまく表示された。
→ .webpという拡張子が使えないのか・・・?しかし、表示されるものもあるので確定でもない気がする。
別のローカル環境だと.webpでもうまく表示されたので、イマイチ再現性がない。

・ローカル環境からテスト環境(エックスサーバー)にAll-in-One WP MigrationというWPプラグインを利用して移行した。
→ 何かDBなどにうまく移行がいかない部分があった...?

現時点での可能性と依頼したいこと

今現在では.webpという拡張子が特定の環境で正しく読み込まれないのか?という見解になっています。
中途半端な情報の部分もあるかと思いますが、上記の情報をもとに、問題の〇〇にある、そのためにはどこを確認すればいいのかというヒントだけでも得たいと考えています。
今の自分の力ではここまでの調査が限界でした。
皆様のお力添えをいただきたいと存じます。

どうぞよろしくお願いいたします。

上記からさらに追加検証を試してみました

なぜアイキャッチ画像が非表示になってしまうのかについて、以下の追加検証結果を報告します。

①まず、applicationsのカスタム投稿タイプの全記事を一度削除し、アイキャッチ画像を再設定しました。

②その後、JavaScriptで動的に出力した記事をチェックボックスで絞り込んだところ、全てのアイキャッチ画像は表示されました。

③次に、全く別のカスタム投稿タイプの非公開記事で定義した画像フィールドタイプのカスタムフィールドに、applicationsのカスタム投稿タイプの記事に設定したアイキャッチ画像をいくつか添付しました。

④しかし、再度②の手順を実行すると、添付した画像が再び非表示になりました。

⑤さらに、③で別の画像を添付してみると、その画像を使用した場所も非表示になり、さらに④で交換したはずの画像も再び非表示になりました。

⑥最後に、非公開記事を公開状態に変更してみましたが、状況に変化はありませんでした。

上記は.webpで検証していましたが、これらを.pngに変更しても同じ結果になりました。つまり画像の拡張子は犯人ではありませんでした。

つまり「WPの管理画面内において、同じ画像(例 image_test_01.png)をある箇所のAというカスタムフィールド、Bというカスタム投稿タイプの投稿のアイキャッチ画像など、同じ画像を管理画面の複数の箇所で設定すると発生するバグ」というところまで突き止めました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tabuu

2023/07/25 23:44

権限エラーのようです。下記を確認してみてください。 ・サムネイル画像を他の非公開の記事に紐づけていないか ・ログインが必要な場合はユーザーの権限 ・サムネイル画像のファイル名に特殊文字や日本語が入っている場合は英数字のみにする
退会済みユーザー

退会済みユーザー

2023/07/26 03:29 編集

回答いただきありがとうございます。 ・サムネイル画像のファイル名に特殊文字や日本語が入っている場合は英数字のみにする > こちらに関しては、すべて同じような名前 image_連番.webpのような形式なので、おそらく問題がないかと思います。 ・サムネイル画像を他の非公開の記事に紐づけていないか こちらを確認してみたいと思います。 ・ログインが必要な場合はユーザーの権限 > こちらに関してですが、具体的にはWPの権限についてということでしょうか。(WPの管理者、寄稿者、編集者等) 現状管理者権限しかなく、アイキャッチを添付した権限もすべて管理者権限で行なっていました。
guest

回答1

0

ベストアンサー

根本的な解決はしませんでしたが、同じサムネイル画像を使わないという手段で回避しました。
異なる画像であれば、正常に表示されます。(つまりAという全く別なるカスタムフィールドなどで、同じ画像を使っていた場合にバグが発生するため)
こちらはWPのREST APIの仕様のようで、現状でも完全な解決は難しいようです。
見ていただいた方ありがとうございました。

投稿2023/08/08 08:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問