こんにちは、Ryohei(@ityryohei)です!

本記事では、WordPressの関数や投稿情報をインストールディレクトリの外にある外部ファイルで使用する方法をご紹介しています。

WordPressの関数や投稿情報をディレクトリの外にある外部ファイルでも使用したいんだけど、良い方法ないかな?

上記の疑問にお答えします。

では、解説していきます。

wp-load.phpを読み込むだけでOK

WordPressをインストールすると、インストールディレクトリの配下にwp-load.phpというファイルが設置されます。wp-load.phpを読み込みことで、設定ファイルや関数群のファイルが読み込まれて投稿やWordPressの関数が使用できるようになります。必要な準備はこれだけです。もっと複雑な手順を踏む必要があるのかと思ったのですが、さすがは長年多くのユーザーに愛され続けているCMSですね。

WordPressの外部から関数を使用する

実際にWordPressのインストールディレクトリの外からwp-load.phpを読み込んで関数を使ってみます。

ディレクトリ構成は下記のようなイメージです。DocumentRoot直下のtest.phpwp-load.phpを読み込み、WordPress関数のhome_url()echoしてみます。

DocumentRoot/
  ├ wp/
  │  ├ wp-admin/
  │  ├ wp-content/
  │  ├ wp-includes/
  │  ├ wp-load.php
  │  └...
  └ test.php

test.php

<?php

require __DIR__.'/wp/wp-load.php';

echo home_url();

実行結果

https://into-the-program.com

実行結果を確認すると、home_url()が動作し、当サイトのURLが出力されています。これでいつでも外部ファイルからWordPressの関数を呼び出すことができます。

WordPressの外部から投稿情報を取得する

関数の呼び出しはできたので、次は投稿情報を取得してみます。テンプレートではないのでメインループは確実に動かないため、サブループを使って投稿情報を取得してみます。パラメータには投稿タイプ(post)と取得する件数(5件)を指定しています。(ディレクトリ構造は前項と同じです。)

test.php

<?php

require __DIR__.'/cms/wp-load.php';

$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5
);
$the_query = new WP_Query($args);

if($the_query->have_posts()):
    while($the_query->have_posts()):
        $the_query->the_post();
        echo get_the_title().'<br>';
    endwhile;
endif;
wp_reset_postdata();

実行結果

【WordPress】同じタクソノミー・ターム内の前へ・次へのリンクを表示する
【PHP】日付(年月日)から曜日を取得する【DateTime】
【JavaScript】textContentの文字列を数値に変換して演算に使用する
【JavaScript】img要素がalt属性を持っていない場合に自動追加する
【WordPress】公開済みの投稿の件数を取得する

実行結果を確認すると、本サイトで投稿している最新の投稿5件のタイトルが出力されました。きちんと動作しています。サブループが動作すれば好きなように投稿を表示することができるので、本記事の目標は達成できていますね。

最後に

WordPressの関数や投稿を外部から取り扱うには複雑な手順が必要に思えましたが、実際にやってみるとwp-load.phpを読み込むだけで済みました。長年運用されてきた実績のあるCMSなので、多くのエンジニアの方がユーザーが使いやすいように改良を重ねてきたんだろうな、と考えると感無量です。今後もありがたく使わせていただきます。

以上、WordPressの関数や投稿情報をディレクトリ外で使用する方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。