WordPress ジョブマネージャーで検索フォームを作成する

  • このエントリーをはてなブックマークに追加
[`evernote` not found]

前回の続き。WordPressのジョブマネージャーというプラグイン。求人情報を管理するには便利なのですが、検索機能としてはカテゴリー毎のソートやキーワード検索しか提供されていません。

ジョブマネージャーの管理「設定」から求人フォームを任意に作成できるのでそれに対応した複数の項目毎にチェックボックスを作成しすべての項目をORでとれるような実装を行いました。

1.検索フォームをfunction.phpで作成します。

イメージはこんな感じ

search

function.php にjobman_search_form()を実装するためのFilter hookを登録します。


add_filter( 'get_search_form', 'jobman_search_form' );

次にjobman_search_form()の実装。


function jobman_search_form( $form ) {
if ( !function_exists( 'jobman_create_dashboard' ) ) {
// already installed 'job-manager' ? by zamuu
return "";
}

$l_home = get_bloginfo('url');

$options = get_option( 'jobman_options' );
$fields = $options['job_fields']; // ジョブマネージャー入力項目情報取得
uasort( $fields, 'jobman_sort_fields' );

// var_dump($fields); // 求人設定確認用
// 職業を取得
$metas = array();
// ※※※ dataX のそれぞれ X,Y,Z は上記var_dump で確認したfieldsインデックスです。
// ※※※ それぞれ検索Queryに設定してください
$metas['地域'] = $fields[X]; // dataX 地域
$metas['職種'] = $fields[Y]; // dataY 職種
$metas['雇用形態'] = $fields[Z]; // dataZ 雇用形態
$meta_list = array(); // html li のタグリストを要素毎に格納する

$srch_key = array();
if(isset($_POST['s'])){
$srch_key = array('地域'=>$_POST['地域'], '職種'=>$_POST['職種'], '雇用形態'=>$_POST['雇用形態']);
}else{
}
// -----
// 検索結果画面に再度検索フォームがある場合はここからのPOST情報を元に復帰させる
// -----
foreach($metas as $key => $meta){
//var_dump($meta['data']);
$chkbox_list = preg_split('/\r\n/',$meta['data']);
$checked = "";
foreach($chkbox_list as $idx => $li){
if(isset($srch_key[$key]) && is_array($srch_key[$key]) && count($srch_key[$key]) > 0){
if( array_search($li, $srch_key[$key]) !== FALSE){
$checked = 'checked';
}else{
$checked = "";
}
}
$meta_list[$key] .= "<li><input type='checkbox' value='{$li}' name='{$key}[]' id='{$key}{$idx}' {$checked}><label for='{$key}{$idx}'>{$li}</label></li>\n";
}
}
// FORMは、ジョブマネージャーの「求人一覧」ページを流用できるようにしています。
$form =<<<_SEARCH_FORM1_
  <!-- ==================== ここのHTMLデザインは省略します ================================== -->
  <form action="{$l_home}/?page_id={$options['main_page']}" method="POST" id="searchform" name="searchform">
    <table>
        <tr><th>地域</th><td>{$meta_list['地域']} </td></tr>
        <tr><th>職種</th><td>{$meta_list['職種']} </td></tr>
        <tr><th>雇用形態</th><td>{$meta_list['雇用形態']} </td></tr>
        <tr><td col="2" class="submit"><input type="submit" value="検索する" /> </td></tr>
    </table>
  </form>
_SEARCH_FORM1_;
return $form;
}

次にジョブマネージャーで追加される固定ページ『求人一覧』に検索結果を出すための処理を追加します。
job-manager/frontend-jobs.php jobman_display_jobs_list() を編集。

	// zamuu chg START-------------------------------------------
	/* ============ ここの部分が修正前 ========== 
	 * if( 'all' != $cat )
	 *	$args['jcat'] = $category->slug;
	 * ============ ここからが修正後 ============*/
	if( 'all' != $cat ){
		$args['jcat'] = $category->slug;
	}else if(isset($_POST['s'])){ // 検索フォームから?
		$srchArea = $_POST['地域'];
		$srchSyoku = $_POST['職種'];
		$srchKoyo = $_POST['雇用形態'];
		// ---
		// 各検索キーをもとにpost_meta からLIKEあいまい検索結果を'OR'でかける
		// ---
		// 職種 kind of
		$arrSyoku = array();
		foreach((array)$srchSyoku as $k => $val){
		    $arrSyoku[$k] = array(  'key'=>'data4', 'value'=>$val, 'compare'=>'LIKE' );
		}
		// Area地域
		$arrArea = array();
		foreach((array)$srchArea as $k => $val){
		    $arrArea[$k] = array(  'key'=>'data7', 'value'=>"$val", 'compare'=>'LIKE' );
		}
		// 雇用形態 employ
		$arrKoyo = array();
		foreach((array)$srchKoyo as $k => $val){
		    $arrKoyo[$k] = array(  'key'=>'data12', 'value'=>$val, 'compare'=>'LIKE' );
		}
		$arrArgs = array_merge($arrSyoku, $arrArea, $arrKoyo);
		$args['meta_query'] = array($arrArgs,'relation'=>'OR');
	}
	// zamuu chg END-------------------------------------------

次に検索フォームを『求人一覧』ページにも実装させます。

	$jobs = get_posts( $args );

	$args['posts_per_page'] = '';
	$args['offset'] = '';
	$args['numberposts'] = -1;
	$jobman_shortcode_all_jobs = get_posts( $args );
	// ================= zamuu add START =================
	if ( function_exists( 'jobman_search_form' ) ) { 
		$content = jobman_search_form("");
	}
	// ================= zamuu add END =================

以上で終了です。

求人設定の入力項目18項以降、一度登録すると更新できない

こんな不具合があったので、admin-jobs-settings.php の jobman_job_setup_updatedb()を修正します。指定フィールドが応募設定の方になっていただけでした。

//            if( array_key_exists( $id, $options['fields'] ) ) {
            if( array_key_exists( $id, $options['job_fields'] ) ) {

 

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。