🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

752閲覧

ワードプレスで静的化したhtmlに同じサーバ内の別サイトの新着記事を取り込みたい

sasa56563

総合スコア22

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/10/03 02:44

編集2019/10/07 07:39

固定ページのブロック編集でカスタムhtmlにphpソースを書き込むことで同じサーバにある別サイトの新着記事を表示させ、それを静的化したいと考えています。
そこで以下のサイトを参考にして固定ページを作成しました。

https://www.goodcircle.jp/blog834/

挿入したソース

<?php require_once( dirname(dirname( __FILE__ )) . '../betusite/wp-load.php' ); ?> <dl> <?php $args = array( "numberposts" => 15, //表示する記事の数 "post_type" => 'blog' //投稿タイプ名 // 条件を追加する場合はここに追記 ); $customPosts = get_posts($args); if($customPosts) ; foreach($customPosts as $post) ; setup_postdata( $post ); ?> <dt><?php the_time('Y年m月d日'); ?></dt> <dd><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></dd> <?php endforeach; ?> <?php else : //記事が無い場合 ?> <?php endif; wp_reset_postdata(); //クエリのリセット echo '<img src="'.$thumbimg.'/images/sample.jpg">'; ?> </dl>

プレビュー画面で見ると

15, //表示する記事の数 "post_type" => 'blog' //投稿タイプ名 // 条件を追加する場合はここに追記 ); $customPosts = get_posts($args); if($customPosts) ; foreach($customPosts as $post) ; setup_postdata( $post ); ?> '; ?>

となってしまいます。正しく表示させる方法をご教示ください。



皆様からご教示いただいたように
そもそもhtmlファイルでphpが実行できていないからというのが第一かと考えました。

いろいろな方法があるかと思いますが、最も簡単な方法で試してみます。
http.confに
AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html
を追記してhttpdを再起動させます。内部側のサーバであり、セキュリティの問題も少ないかと思いますので一旦これで試してみます。

ワードプレスのRSSフィードを使ってみました

最終的にはワードプレスのRSSフィードを使って、同じサーバ内の他サイト新着記事を表示させるのが簡単なようです。

問題は、静的化するとリンク先がワードプレスサーバのローカルアドレスを表示し、当然公開サーバに転送するとリンク切れを起こします。
ドメインに置き換えるのはかなり難しいと思いますので、できればRSSのURLを非表示にしたいと思います。

あるサイトに

head内のフィードURLを消す方法 こちらは、フィード配信を停止するのではなく、head内にurlを出力されるのを停止します。おもにブラウザに自動的に読み取ってもらうための機能です。 remove_action( 'wp_head', 'feed_links', 2); // 1~2を消去 remove_action( 'wp_head', 'feed_links_extra', 3); // 3~7を消去

というのがあったので子テーマに記述しましたが、これは自サイトのRSS表示を制御するようで、取り込んだRSSには適用していないようです。
取り込んだRSS記事のURLを非表示にするにはどうするかお教えいただけないでしょうか。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/10/03 02:58

htmlはあくまで静的ファイルなので、動的に実行して外部のデータを取り込んで表示するならphpじゃないといけない気がするし、もしくは何らかの方法で定期的に外部のデータを取り込む処理が静的htmlを出力するというやり方もできそうだが、どうやって実現したいかkwsk
退会済みユーザー

退会済みユーザー

2019/10/03 03:00

参考サイトの「拡張子がhtmlの場合、phpのコードが使えるようにしておいてくださいね」ってのは、対策済みですか?
sasa56563

2019/10/03 10:07

やはりうまく働いていないようですので 本文に追記しましたようにhttp.conf変更でapacheそのもので対応してみます。
guest

回答1

0

固定ページというのはWPの固定ページのことで
htmlファイルのページってことではないですよね?

やりたいことと見ているものが食い違ってる気がします

カスタムhtmlブロックにphpのコードを書いても実行されません
記事中に動的な要素を挿入したいならショートコードを使いましょう

カスタム投稿タイプでなく通常投稿の記事一覧であれば
WP5.2からは普通にRSSブロックもあるので
それを使うのが本当は一番早いですが・・・

固定ページでなくhtmlのページにWPの新着記事一覧出したいなら
ajax+WP APIでやるのがいいです

キャッシュ系プラグインなどで固定ページを静的化しても
新着記事一覧の部分だけは動的にしておきたいという目的であれば
wp-load.phpをincludeしちゃおうとしてる時点で
キャッシュのプラグインの意味がなくなってます
もうキャッシュの対象から除外した方がいいです

キャッシュに穴を空けて一部だけ動的にするということが
できるキャッシュ系プラグインもありますが
できるかどうかはプラグイン次第

投稿2019/10/03 04:11

KazuhiroHatano

総合スコア7819

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

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

sasa56563

2019/10/03 04:35

php利用可能な作成用サーバのワードプレスで同じサーバにある別サイトの新着データを取り込み、simplySTATICSで静的化したうえで、公開サーバ側に転送しようとしています。 https://gist.github.com/tomoyasu999/a2e60701c61a913b609595a39ce6bc7f によりfunction.phpにカスタムHtmlでphpが動作するようにしました。 RSSを使う方法もいいと思うのですが、phpを使わない公開サーバでどのように FEED表示できるのかわかりません。 >>カスタム投稿タイプでなく通常投稿の記事一覧であれば >>WP5.2からは普通にRSSブロックもあるので 静的化してもつかえるのでしょうか。
KazuhiroHatano

2019/10/03 04:50

キャッシュ系プラグインの吐き出すHTMLでの話なら wp-load.phpをincludeするのならキャッシュの意味がありません 表示したいのがカスタム投稿な時点で WPの通常のRSSでは取得できません プラグインなど使えばできるでしょうが そんな手間をかけるならWP APIでやる方がいいです RSSブロックはSSRでAjaxは使ってないようです
KazuhiroHatano

2019/10/03 05:06

カスタムHTMLブロックでajax+WP APIで記事一覧を表示するJSを書く というのが最適な方法かと思います
sasa56563

2019/10/03 05:07

おっしゃるようにphpが動作していないようです。 <?php phpinfo(); ?> 簡単なソースを入れてみましたが、なにも表示されていません。
sasa56563

2019/10/03 05:17

ありがとうございます。 >カスタムHTMLブロックでajax+WP APIで記事一覧を表示するJSを書く >というのが最適な方法かと思います そうかと納得すると同時にajaxについては、ほとんど知識がありませんので、そこから勉強する必要があるようです。
sasa56563

2019/10/03 10:09

本文に追記で書きましたが、とりあえずapacheでhtmlでphpが動作するように設定してみます。
KazuhiroHatano

2019/10/03 11:04

何度も書いてますが、書き出したhtmlファイルをPHPにしてWordPressを読み込むとかやってるんじゃ本末転倒というか本来の目的を果たしてないんじゃないかと思います simplySTATICSを使うということは、WPのオーバーヘッドをなくして高速に表示したいとかいうような目的があるものと思います htmlファイルをPHPとして実行させかつWPを読み込むという手法は セキュリティ面でも保守管理の面でも爆弾になりえます そして最新の投稿一覧を表示するという簡単な目的に対して あまりに大げさなやり方です WP APIをつかうのでも結局非同期でWPは呼ばれるので、サーバー負荷の総計では変わらないかもしれないですが、ページの表示速度の点では全然違います 静的ページに最新の投稿一覧を表示するのにajaxという手段は シンプルで安全で簡単な選択です 今時分WEB制作を行うのにajaxと無縁でなどいられません これを機にajaxを使いましょう https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch
sasa56563

2019/10/03 13:27

ありがとうございます。 書き出したhtmlファイルをPHPにしてWordPressを読み込むではなく、 同じサーバ及びDB内で、wpで動作している別の新着データを取り込み、静的化して、公開サーバ側(DMZ)に転送しています。新着データの元サイトも静的化した上で公開サーバに転送しています。 主な目的は、公開ポートを制限し、(動的なものは動かない状態で)セキュリティを高めるためです。 一方作成サーバは内部LANにありますので、セキュリティの問題は少ないと考えますが、静的化した時点のデータですので定期的に作成し、転送する必要があります。 しかし、おっしゃていただいた ajaxは、最適な解のようですが、名前くらいであまり知りませんでした。これを機に勉強してみたいのですが、ハードルが高そうですね。
sasa56563

2019/10/03 13:38

ajaxについて全くの素人ということでお伺いしたいのですが、 上記のように (LAN)wordpressで静的化ファイルを作成→(暗号化転送)→(DMZ)公開サーバで完全静的htmlとして の場合、静的化の時点でajaxを動作させるのでしょうか。公開サーバではphp、cgi等動的な機能は使えません。
KazuhiroHatano

2019/10/04 01:44

新着記事を取得したい同サーバーの別サイトというのもhtmlにされてるってことなんですかね 質問でやってることから色々と推測して回答してましたが、なんか色々と前提が崩れます 件の別サイトも静的化されているならWP APIは使えません 別サイトからはカスタム投稿のRSSを書き出せるようにして それをajaxで取得して表示するか RSSブロックで表示するとかいったやり方をすることになると思います 別サイト側のRSSの更新を自動で反映したいならカスタムHTMLブロックにajaxでRSS表示 都度記事一覧の更新も行うのでもいいならRSSブロック
sasa56563

2019/10/04 13:14

丁寧な回答本当にありがとうございます。 やっていることとやろうとしていること LAN上のWPサーバにサイトA,B,Cとそれらの新着情報をまとめて表示するサイトDがあり、いずれも静的化した上で、DMZ上の公開サーバに転送しています。公開サーバは動的コンテンツを持ちませんので、WPサーバでDはA,B,Cの新着情報(WPサーバ上の)を取り込んだ上で静的化したhtmlを作成しています。 当初RSSを使うことでと考えたのですが、中身を表示させるFEEDをどうするかで立ち止まってしまいました。googleのサービスもあったりしたのですが・・・・ ajaxでRSS表示ということをお教えいただいたのでどこかでサンプルを見ながら勉強したいと思います。
sasa56563

2019/10/07 07:44

主文に追記しましたが、ワードプレス自身のRSSを使って目的のものを表示させることはできました。 しかし、静的化して転送するとRSSのURLはWPサーバのローカルアドレスを表示します。 サブドメインアドレスに置換できればいいのですが、無理なので、URLを非表示にできればと考えています。 どこをどうか着替えればいいか思案しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問