求人プラグインマニュアル
求人記事を公開するだけで、HTMLと構造化データが生成されますが、sitemap.xmlを設置する、Indexing APIを使用することでより効率的にGoogleにインデックスされます。

更新情報・2020/02/15 BEMに乗っ取ったHTML構造に変更
・2020/02/28 ウイジェット機能追加
・2021/11/08 CSSの説明変更

目次

1. メニュー
2. 設定画面
3. 投稿画面
4. 求人一覧ページ
5. 求人詳細ページ
6. 求人を停止する
7. ショートコード・関数について
8. ウイジェット
9. Indexing APIについて

メニュー
プラグインを有効にすると、管理画面左の帯に下図のようなメニューが追加されます。

作成済みの求人一覧
求人を新規作成

求人の設定

設定画面

求人の公開・表示の設定を行います。
求人が一つのみで求人一覧ページが必要ない、求人詳細は任意のページにショートコード、またはphpの関数を使って埋め込むので、詳細ページは公開したくない、既存のCSSを利用しないなどのカスタマイズが可能です。
→ショートコード、関数について

投稿画面3-1
求人のタイトル

構造化データ、HTMLを自動生成するか選択
求人ページはHTMLで追加を選んだ場合、HTMLは自動生成されません

求人の期限
求人の開始日は必須、終了日は記入推奨

求人のリードテキスト
必須項目

求人のタイトル付きフリーテキスト

入力エリアを削除

入力エリアを追加

投稿画面3-2
求人の勤務地
Google mapのHTMLも同時に生成するが、マップが意図した位置ではない場合はGoogle map用の住所を入力。
（Google map用の住所は構造化データには使われません）

求人の勤務時間
求人の雇用形態
複数選択可能

求人の給与
給与のユニットは年俸、月給、週給、日給最小のみの記入でも大丈夫です。

求人の業務責任求人の必要なスキル
求人の必要な免許・資格
求人の必要な学歴
求人の必要な経験

投稿画面3-3（サイドバー）
企業ロゴ

求人を公開
会社名

WEBサイトアイキャッチ画像
記事詳細、記事一覧で使われます

求人の管理ID

お問合せの電話番号

問い合わせフォーム

求人一覧ページ※有効中のテーマの中にarchive-recruit.phpがない場合、プラグインのデフォルトのアーカイブページテンプレートが使われます。
デザインがテーマに合わない場合、テーマの中にarchive-recruit.phpを作成して、下記の関数でループを呼び出してください。

アーカイブテンプレートに求人一覧を表示する関数<?php insert_recruit_list();?>

関数で表示されるHTML<p>現在、{WPのタイトル}では一緒に働いてくれるスタッフの募集を行なっています。<br>募集している職種は下記の通りです。</p><div class=“custom-recruit__archive">//////////////////▼ループ箇所▼//////////////////////<article class="custom-recruit__archive__item"><div class="custom-recruit__archive__item__img"><img src=“{アイキャッチ中サイズ}” alt="{求人のタイトル}"></div><div class="custom-recruit__archive__item__body"><h3 class="custom-recruit__archive__item__ttl">{求人のタイトル}</h3><div class=“custom-recruit__archive__item__description">{求人のリードテキスト（50文字）}</div><div class="custom-recruit__archive__item__detail-btn"><a href=“{求人詳細のURL}” title="{求人のタイトル}">求人詳細</a></div></div></article>//////////////////▲ループ箇所▲//////////////////////</div>//////////////////記事なし//////////////////////<p>申し訳ありません。<br>現在、{WPのタイトル}では募集中の求人はありません。</p>求人詳細ページ3-1※有効中のテーマの中にsingle-recruit.phpがない場合、プラグインのデフォルトのシングルページテンプレートが使われます。
デザインがテーマに合わない場合、テーマの中にsingle-recruit.phpを作成して、下記の関数で記事詳細を呼び出してください。

シングルページテンプレートに求人HTMLを表示する関数<?php echo insert_recruit_html();?>

関数で表示されるHTML<div class="custom-recruit__detail"><div class="custom-recruit__detail__description"><div class="custom-recruit__detail__description-lead"><p>{求人のリードテキスト}</p></div><div class="custom-recruit__detail__description-list"><div class="custom-recruit__detail__description-list__item"><div class="custom-recruit__detail__description-list__title"><h2>{求人のタイトル付きフリーテキスト[タイトル]}</h2></div><div class="custom-recruit__detail__description-list__txt"><p>{求人のタイトル付きフリーテキスト[テキスト]}</p></div></div></div><div class="custom-recruit__detail__datalist"><table class="custom-recruit__detail__datalist__table">

次ページに続きます求人詳細ページ3-2
前ページの続き<tbody><tr><th>勤務地</th><td>{求人の勤務地}<div class=“recruit_map">{求人の勤務地から生成したGoogle mapのiframe}</div></td>
</tr>
<tr>
<th>勤務時間</th><td>{求人の勤務時間}</td>
</tr>
<tr>
<th>雇用形態</th><td>{求人の雇用形態}</td>
</tr>
<tr>
<th>給与</th><td>{求人の給与}</td>
</tr>
<tr>
<th>業務責任</th><td>{求人の業務責任}</td></tr><tr><th>必要なスキル</th><td>{求人の必要なスキル}</td>
</tr>
<tr>
<th>必要な免許・資格</th><td>{求人の必要な免許・資格}</td>
</tr>
<tr>
<th>必要な学歴</th><td>{求人の必要な学歴}</td>
</tr>
<tr>
<th>必要な経験</th><td>{求人の必要な経験}</td></tr></tbody></table></div></div><p>採用に関するお問合せは、<a href="{お問合せのフォーム}">フォーム</a>または<a href="tel:{お問合せの電話番号}">お電話</a>でお気軽にお問合せください。</p>求人詳細ページ3-3関数で生成される構造化データ<script type="application/ld+json">{"@context": "http://schema.org/","@type": "JobPosting","title": “{求人のタイトル} 【求人の雇用形態(,区切り)}】","description":"<h1>■■■■{求人のタイトル}の求人内容■■■■<h1><br /><p>{求人のリードテキスト}<p><br /><h2>【{求人のタイトル付きフリーテキスト[タイトル]}】</h2><p>{求人のタイトル付きフリーテキスト[テキスト]}</p><br /><h2>【業務責任】</h2><p>{求人の業務責任}</p><br /><h2>【応募に必要なスキル】</h2><p>{求人の必要なスキル}</p><br /><h2>【応募に必要な免許・資格】</h2><p>{求人の必要な免許・資格}</p><br /><h2>【応募に必要な学歴】</h2><p>{求人の必要な学歴}</p><br /><h2>【応募に必要な経験】</h2><p>{求人の必要な経験}</p><br />”,
"identifier": {"@type": "PropertyValue","name": “{会社名}","value": “{求人の管理ID}"},"hiringOrganization" : {"@type": "Organization","name": "{会社名}","sameAs": "{WEBサイト}","logo": "{企業ロゴ}" },"industry": "","employmentType": “[{求人の雇用形態(,区切り)}]”,"workHours": "{求人の勤務時間}","datePosted": “{求人の期限（開始日）}","validThrough": "{求人の期限（終了日）}","jobLocation": {"@type": "Place","address": {"@type": "PostalAddress","streetAddress": "{求人の勤務地（それ以降の住所）}","addressLocality": "{求人の勤務地（市区町村）}","addressRegion": "{求人の勤務地（都道府県）}","postalCode": "{求人の勤務地（郵便番号）}","addressCountry": "JA"}},"baseSalary": {"@type": "MonetaryAmount","currency": "JPY","value": {"@type": "QuantitativeValue","minValue": "{求人の給与（最小）}","maxValue": "{求人の給与（最大）}","unitText": “{求人の給与（ユニット）}","value": “{求人の給与（最小）}"}},"responsibilities": "{求人の業務責任}","skills": "{求人の必要なスキル}","qualifications": "{求人の必要な免許・資格}","educationRequirements": “{求人の必要な学歴}","experienceRequirements": "{求人の必要な経験}"}</script></div>

求人を停止する
求人を停止する場合は求人の記事を削除してください。
停止したことを早くGoogleにインデックスして欲しい場合はIndexing APIを使用する。

関数・ショートコードについて
このプラグインで使える関数・ショートコードの一覧です。

アーカイブテンプレートに求人一覧を表示する関数<?php insert_recruit_list();?>

シングルページテンプレートに求人HTMLを表示する関数<?php echo insert_recruit_html();?>

任意のテンプレートに特定の求人詳細を表示する関数<?php echo insert_recruit_html(表示したい求人の投稿ID);?>

固定ページ、投稿ページに特定の求人詳細を表示するショートコード[insert_myrecruit_page my_recruit_id=表示したい求人の投稿ID]

ウイジェットについて
ウイジェットの使えるテーマの場合プラグインを有効化すると「最近の投稿（求人）」が利用できます。

<h2>ウイジェットタイトル</h2><div class="widget_recent_entries"><ul class="custom-recruit__widget-ul"><li class=“custom-recruit__widget-li"><a href="記事リンク" title="記事タイトル">記事タイトル</a>
</li>
</ul>
</div>

Indexing API
前提条件
1. Indexing API を有効にし、新しいサービス アカウントを作成
2. Search Console で所有権を確認し、アクセス トークンを取得して API 呼び出しを認証する

1-1. Indexing API を有効にし、新しいサービス アカウントを作成
セットアップツールを使⽤して、Google APIコンソールでプロジェクトの作成、APIの有効化、認証情報の作成を⾏います。

プロジェクト作成を選び続行Indexing API

認証情報へ進む

ウェブブラウザかChromeアプリを選ぶIndexing API

同意画面に行き情報を入力する

APIを呼び出す場所でChromeアプリを選んだ場合名前とアプリケーションIDの入力をする。
アプリケーションIDは英小文字32文字で入力。
（パスワード自動生成してくれるサービスなどで作成すると楽）Indexing API

認証情報をローカルにダウンロードしておくIndexing API
1-2. 新しいサービス アカウントを作成
サービスアカウントページへ移動する

1-1で作成したプロジェクトを選ぶ

遷移したページ上部にあるサービスアカウントを作成をクリック

Indexing API

任意のアカウント名を入力し、作成をクリック

役割をオーナーにして続行をクリック

Indexing API・キーを作成をクリック
・キーのタイプをJSONにチェック・作成をクリックダウンロードされた秘密鍵は重要な鍵ファイルなので扱いに注意Indexing API

サービスアカウントのページに戻りメールを控えておくIndexing API
2-1. Search Console で所有権を確認
Search Consoleで求人ページの置いてあるサイトをあらかじめ登録しておく

登録が済んだらユーザーを追加から先ほどサービスアカウントページで控えたメールアドレスを入力しユーザーを追加する。

Indexing API
2-2. OAuth アクセストークンを取得、求人の更新・削除を通知する
google-api-php-clientをダウンロードして解凍し、フォルダ名をgoogle-api-php-client-2.2.2からgoogle-api-php-clientにリネームする。
google-api-php-clientをPHPが実行可能な環境（mamp、xamppなど、PHPモジュールの入ったサーバー）に設置する。
同じディレクトリに1-2で取得した鍵ファイルを置く。
アクセストークンを取得、求人を更新するプログラムと、求人を削除するプログラムを同じディレクトリに置く。

example：mampにindexingというディレクトリを作り設置した場合! indexing! google-api-php-client
鍵ファイル.json
update.php
delete.php

http://mampのurl/indexing/update.php → ブラウザでアクセスすることでプログラム実行し、求人の更新をGoogleに知らせる
http://mampのurl/indexing/delete.php → ブラウザでアクセスすることでプログラム実行し、求人の削除をGoogleに知らせる

Indexing API
update.php<?php
require_once './google-api-php-client/vendor/autoload.php';$client = new Google_Client();// service_account_file.json is the private key that you created for your service account.
$client->setAuthConfig('鍵ファイル名.json');$client->addScope('https://www.googleapis.com/auth/indexing');// Get a Guzzle HTTP Client$httpClient = $client->authorize();$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';// Define contents here. The structure of the content is described in the next step.
$content = "{\"url\": \"https://リクルート詳細記事のURL/\",\"type\": \"URL_UPDATED\"}";$response = $httpClient->post($endpoint, [ 'body' => $content ]);$status_code = $response->getStatusCode();print_r($response);
echo "\n";echo “$status_code";?>

実行結果のstatus̲codeの箇所が200になっていたら成功Indexing API
delete.php<?php
require_once './google-api-php-client/vendor/autoload.php';$client = new Google_Client();// service_account_file.json is the private key that you created for your service account.
$client->setAuthConfig('鍵ファイル名.json');$client->addScope('https://www.googleapis.com/auth/indexing');// Get a Guzzle HTTP Client$httpClient = $client->authorize();$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';// Define contents here. The structure of the content is described in the next step.
$content = "{\"url\": \"https://削除されたリクルート詳細記事のURL/\",\"type\": \”URL_DELETED\"}";$response = $httpClient->post($endpoint, [ 'body' => $content ]);$status_code = $response->getStatusCode();print_r($response);
echo "\n";echo “$status_code";?>