【wordpress】【php】WordPress配下外のスクリプトファイルから、WordPressのデータを取得する

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です。

f:id:nakahashi_h:20190123212816p:plain

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で実施します。

wpdocs.osdn.jp

今回は、固定ページの順序の昇順にしますので次のように指定します。

<?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 を使います。

wpdocs.osdn.jp

実際に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の情報表示できるようになりました。

©︎2017-2018 WebSandBag