別ドメイン・別サーバーにインストールされたWordPressの内容を表示させる方法をご紹介したいと思います。クライアントの環境に実装して、正常に表示できたので実施した手順を解説します。
まず、今回実装したサイトは、WADAXでかなり昔から運用されていたサイトで、ブログを書きたいということでWordPressを提案したのですが、データベースが使えない状況でした。PHPは利用可能でした。
WADAX内でデータベースが使える環境に移行することもできましたが、サーバーが変わるので別のサーバーに移行するときと同じように、メールアドレスの再設定などが必要ということでした。
メールアドレスを再設定するのは避けたいということだったので、結構強引な方法でWordPressの内容を表示させています。また、別サーバーの内容を表示させる場合、fopenを使うやり方が主流のようですが、WADAXではfopenが禁止されていたので、cURLを使っています。
WordPressサイト側の作業
事前準備
まずはWordPressがインストールできるサーバーを用意してインストールしましょう。今回はエックスサーバーにWordPressを設置しました。
パーマリンクの設定
投稿IDを使って記事の内容を取得するため、パーマリンク設定を「基本」に設定しておきます。
投稿一覧を表示するページの作成
cURLでは指定したURLの情報をそのまま全部取得するので、事前に余分な要素を削ったテンプレートを用意します。メインサイトに投稿一覧を表示したかったので、最新の記事を5件表示するためのページテンプレート(page-newpost.php)を作成しました。
<?php
/*
Template Name: 最新の投稿
*/
?>
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'paged' => $paged,
'posts_per_page' => 5,
);
$wp_query_post = new WP_Query($args);
?>
<?php if ($wp_query_post->have_posts()): ?>
<ul>
<?php while($wp_query_post->have_posts()): $wp_query_post->the_post(); ?>
<?php
$str = get_permalink();
$new_str = str_replace('WordPressサイトのURL', 'メインサイトのURL/wp_content.php', $str);
?>
<li class="recent-list">
<a href="<?php print $new_str; ?>"><?php the_title(); ?></a>
</li>
<?php endwhile; ?>
</ul>
<?php else: ?><p>No items</p>
<?php endif; wp_reset_postdata(); ?>
WordPressサイトとメインサイトのURLは環境に合わせて変更してください。メインサイト内に設置したwp_content.phpで記事の内容を表示するために、記事のリンク先を置換しています。
固定ページを追加し、作成したページテンプレートを適用します。これで、最新記事の一覧のみが表示されるページができましたので、後ほどメインサイトでこのページの内容を取得して表示します。
カテゴリー一覧を表示するページの作成
カテゴリー一覧も表示したい場合は、ページテンプレート(page-catlist.php)を作成します。
<?php
/*
Template Name: カテゴリー一覧
*/
?>
<ul class="catlist">
<?php
$cat_all = get_terms( "category", "fields=all&get=all&parent=0" );
foreach( $cat_all as $value ):
$str = get_category_link( $value->term_id );
$new_str = str_replace('WordPressサイトのURL', 'メインサイトのURL/wp_content_cat.php', $str);
?>
<li class="<?php echo $value->slug;?>">
<a href="<?php echo $new_str; ?>">
<?php echo $value->name;?>
<span>
(<?php echo $value->count;?>)
</span>
</a>
</li>
<?php endforeach; ?>
</ul>
投稿一覧と同様に、固定ページを追加して適用します。記事数の表示が必要ない場合は、「<?php echo $value->count;?>」の部分は削除してください。
タイトル取得用のページ作成
これはなくても構いませんが、記事を表示した時の<title>タグに、ページタイトルを入れるために使うページです。
<?php
/*
Template Name: ページタイトル
*/
ini_set("display_errors", On);
error_reporting(E_ALL);
$postid = $_GET['pid'];
if (!empty($postid)) {
$title = get_the_title($postid);
echo $title;
}
else {
echo "サイトタイトル";
}
?>
投稿一覧やカテゴリーと同じようにページテンプレート(page-gettitle.php)を作成して、固定ページに適用します。
メインサイト側の作業
投稿一覧の表示
メインサイト側で投稿一覧を表示させます。以下コードを記述した場所に、投稿一覧が表示されます。
<?php
$url="WordPressサイトのURL/?page_id=1"; //投稿一覧ページのURLを指定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
echo $contents;
curl_close($ch);
?>
WordPressサイト側で作成した、投稿一覧を表示するページのURLを指定してください。
記事の内容を表示するためのファイル作成
記事の内容を表示するためのファイル(wp_content.php)を作成します。
<?php
$postid = $_GET['p'];
$url="WordPressサイトのURL/?p=" . $postid;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
echo $contents;
curl_close($ch);
?>
上記コードを記述した場所に、記事の内容が表示されます。
<title>タグを取得する場合は、以下を記述します。
<?php
$postid = $_GET['p'];
if (!empty($postid)) {
$url="WordPressサイトのURL/?page_id=2&pid=" . $postid; //タイトル取得用ページのURLを指定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
if (!empty($contents)) {
echo "<title>" . $contents . "</title>";
}
else {
echo "<title>サイトタイトル</title>";
}
curl_close($ch);
}
else {
echo "<title>サイトタイトル</title>";
}
?>
WordPressサイトに作成しておいたタイトル取得用のページから、記事のタイトルを取得して出力します。
カテゴリー一覧の表示
カテゴリー一覧を表示したい箇所に、以下のコードを追加します。
<?php
$url="WordPressサイトのURL/?page_id=3"; //カテゴリー一覧ページのURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
echo $contents;
curl_close($ch);
?>
WordPressサイト側で作成したカテゴリー一覧表示用のページのURLを指定してください。
カテゴリーに属する記事一覧を表示するためのファイル作成
カテゴリー一覧からカテゴリーをクリックした時に表示される、カテゴリーに属する記事一覧を表示するためのファイル(wp_content_cat.php)を作成します。
<?php
$catid = $_GET['cat'];
$url="WordPressサイトのURL/?cat=" . $catid;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
echo $contents;
curl_close($ch);
?>
上記コードを記述した場所に、カテゴリーに属する記事一覧が表示されます。
あとがき
以上で、一通りの作業は完了です。これで、投稿一覧やカテゴリーを別の環境に表示することができます。
強引なやり方ですが、どうしても別環境のWordPressから内容を拾ってくる必要がある場合は、参考にしていただければと思います。