WordPress主体のサイトで、WordPressにはない機能を追加したい場合があります。
おそらくですが…
固定ページやテーマのfunction.php
等を駆使すれば、大概のアプリケーションは作成できます。
しかし、組み込む事で難易度が上がったり、保守性が落ちる事が考えられます。
(私はオススメしません。)
そのため、WordPressとは別に、自作アプリケーションを設置するのが良いと思います。
自作アプリケーションをWordPressと同じサーバー内に置くこと自体は可能です。
しかし、次の懸念があります。
- WordPressの共通パーツを使わなければならない。
- 最新記事一覧等を表示させないといけない。
この記事では、WordPressと自作アプリケーションを共存させる方法について記載します。
概要
今回は固定ページから、親子関係がある固定ページを抽出して次のように表示します。
<ul> <li><a href="(子固定ページ1のリンク)">子固定ページ1</a></li> <li><a href="(子固定ページ2のリンク)">子固定ページ2</a></li> <li><a href="(子固定ページ3のリンク)">子固定ページ3</a></li> <li><a href="(子固定ページ4のリンク)">子固定ページ4</a></li> </ul>
ファイル構成
WordPressの本体はwordpress
内にあります。
index.phpから固定ページのデータを読み込む想定です。
root ├wordpress │ └wp-load.php └index.php
仕様
今回の記事は、WordPressの4系になります。
現行の5系とは違うところがあるかも知れませんのでご了承ください。
項目 | バージョン |
---|---|
WordPress | WordPress 4.8 |
Step.1 親の固定ページを確定する
まず、WordPressのダッシュボード(管理画面)から、抽出したい固定ページの親の情報を取得します。
固定ページをフィルタリングするためには、親の記事IDが必要になります。
固定ページの記事IDでは、(私の知る限り)ページ上から確認することができません。
そのため、記事IDを確認するには、記事編集画面のURLから確認します。
下記のように、GETの引数にあるpost
が記事IDです。
この場合、親の記事IDは、8
です。
Step.2 wp-load.phpを読み込む
wordpressに配下では無いページからデータを取得する場合は、wordpress
ディレクトリ配下にあるwp-load.php
を読み込みます。
<? require_once($_SERVER['DOCUMENT_ROOT'] . '/wordpress/wp-load.php'); ?>
Step.3 固定ページをフィルタリングして取得
親の記事IDが8
の固定ページを取得します。
固定ページの取得は、get_pages
で実施します。
今回は、固定ページの順序の昇順にしますので次のように指定します。
<?php require_once($_SERVER['DOCUMENT_ROOT'] . '/wordpress/wp-load.php'); global $post; $args = [ 'post_type' => 'page', 'sort_order' => 'asc', 'sort_column' => 'menu_order', 'child_of' => 8 ]; $myposts = get_pages( $args ); ?>
Step.4 取得した固定ページの表示
前項で該当する固定ページを取得することが出来ましたので、順番に表示します。
固定ページの情報をテンプレートタグで使えるようにするためには、setup_postdata
を使います。
実際にhtmlに組み込むと次のようになります。
<ul> <?php require_once($_SERVER['DOCUMENT_ROOT'] . '/wordpress/wp-load.php'); global $post; $args = [ 'post_type' => 'page', 'sort_order' => 'asc', 'sort_column' => 'menu_order', 'child_of' => 8 ]; $myposts = get_pages( $args ); foreach($myposts as $post) : setup_postdata($post); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </li> <?php endforeach; ?> </ul>
以上です。
これで、配下では無いページでも、wordpressの情報表示できるようになりました。