別のWPのデータにアクセスして記事一覧などを取得する

ワードプレス

コーポレートサイトの下層に採用サイトを置いてあるような場合の話。

トップ等に求人情報一覧を出す場合などに。

別サーバーの場合はフィード等を利用することになると思います。

ソース

<?php
/* ---------- タクソノミーを指定 ---------- */
$tax = 'affiliation';
/* ---------- 別のデータベースに接続 ---------- */
$mysql = mysqli_connect( 'ホスト名', 'ユーザー名', 'パスワード', 'データベース名' );
mysqli_set_charset( $mysql, "utf8" );

$result = mysqli_query( $mysql, '
SELECT ID, post_date, post_title, guid, post_content
FROM wp_posts
WHERE post_status = "publish"
AND post_type = "job_information"
ORDER BY post_date DESC
LIMIT 4
');

while( $item = mysqli_fetch_assoc( $result ) ){
	$pid		= $item["ID"];
	$title		= $item["post_title"];
	$link		= $item["guid"];
	$content	= $item["post_content"];
	$cats_result = mysqli_query( $mysql, '
SELECT slug
FROM wp_term_relationships
INNER JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
INNER JOIN wp_terms ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_term_relationships.object_id = '. $pid . '
AND wp_term_taxonomy.taxonomy = "' . $tax . '"
');
$cats = array();
while( $cats_row = mysqli_fetch_assoc( $cats_result ) ){
	$cats[] = $cats_row["slug"];
};
$cats = implode( ",", $cats );
echo '<article>';
echo '<h2 class="entry-title"><a href="' . $link . '" target="_blank" rel="noopener">' . $title . '</a></h2>';
echo '<p>分類:' . $cats . '</p>';
echo '</article>';
};
mysqli_close($mysql);
?>

参考:静的ページに外部のWordPressから記事を読み込む方法 解説

求人の投稿タイプ「job_information」の最新4件出す、という感じにしてあります。

接頭語は「wp_」と仮定。

「$tax = ‘affiliation’」は、募集している事業所分類。

タームのスラッグを出していますが、ラベルの場合は、下記のように。

SELECT name
$cats[] = $cats_row["name"];

タームでの絞り込みは難しい

本当は「ある事業所の紹介記事」に「その事業所が募集している求人4件」としたかったのですが「特定のタームの最新4件」とするのが難しい。

一覧を取得した後に絞り込むことは出来ますが、「●●件」が出来ない。

「AND term = “事業所Aのスラッグ”」みたいな書き方で絞り込めれば良いのですが、配列なので難しそう。

「カスタムフィールド – ラジオボタン」にしとけば出来るかな。が、そうすると採用サイトの求人情報の処理が面倒くさいかな。

 

また、全件取得した後に4件で出力ストップ、なら出来ますが、多分実行速度が目に見えて落ちる。

丁度いいサンプルも落ちてないし、SQLは全然分からないのでお手上げ。

 

こういうことが必要な場合は

  • コーポレートサイト内に採用情報も一体化
  • 条件分岐で採用関連のページや求人情報に別のテンプレートを割り当てる

等にした方が、面倒臭いけど無難かも。


最初に目にしたサンプルは古かったみたいで「mysql_connect」「mysql_query」等を使っていて、PHP8で動きませんでした。いろいろ変わってるのね、PHP。