コーポレートサイトの下層に採用サイトを置いてあるような場合の話。
トップ等に求人情報一覧を出す場合などに。
別サーバーの場合はフィード等を利用することになると思います。
ソース
<?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。