【WP Job Manager】WP Job Managerで作成した求人一覧を職種毎に自分で取得する

求人機能を実装するためのプラグインの1つに、「WP Job Manager」というものがあります。

デフォルトで使うと以下のような形で表示され、普段使いにはそのままでも十分な感じです。

プラグイン利用(デフォルト)

ですが、今回は自分で取得する方法を考えてみます。

これ考えとくと、メタ情報とかカスタムフィールドの情報とか追加するときに便利では?

とふと思ったので。

以下がイメージです。

職種取得の最終イメージ

流れとしては、

1.職種一覧を取得。
2.各職種を基に、WP_Queryで投稿情報を取得・表示

という流れです。

ちなみに職種一覧は、「求人情報」の「職種」で作成したやつです。

各職種を取得

get_termsという関数を使って各職種情報を取得します。

引数はまんまで大丈夫です。

$taxonomy_slug = 'job_listing_category';
$post_type_slug = 'job_listing';
$args = array(
    'hide_empty' => false // カウント0のタームも取得する
);
$terms_obj = get_terms( $taxonomy_slug , $args ); // タームを取得

最後の行の$terms_objを使って、求人記事を取得します。

職種毎に記事を取得・表示する

WP_Queryで記事を取得・表示します。

if( !is_wp_error( $terms_obj ) && count( $terms_obj ) ){
	foreach( $terms_obj as $term ){
		echo '<h3>'.$term->name.'</h3>';
		//投稿取得
		$my_query = new WP_Query( array(
            'post_type' => $post_type_slug,
            'posts_per_page' => 5, // 表示させたい記事数
            'tax_query' => array(
                array(
                    'taxonomy' => $taxonomy_slug,
                    'terms' => $term->slug,
					'field' => 'slug',
                    )
                )
            ));
		
		if( $my_query->have_posts() ){
			while( $my_query->have_posts() ){
				$my_query->the_post();
				 echo '<h4>'.get_the_title().'</h4>';
			}
		}
		wp_reset_postdata();	
	}
}

'posts_per_page’やechoで出力する内容は適宜調整頂ければと思います。

ループのコードはこちらの記事をかなり参考にしました。

最終コード

先程の2つのコードをガッチャンコするだけです。

$taxonomy_slug = 'job_listing_category';
$post_type_slug = 'job_listing';
$args = array(
    'hide_empty' => false // カウント0のタームも取得する
);
$terms_obj = get_terms( $taxonomy_slug , $args ); // タームを取得
if( !is_wp_error( $terms_obj ) && count( $terms_obj ) ){
	foreach( $terms_obj as $term ){
		echo '<h3>'.$term->name.'</h3>';
		//投稿取得
		$my_query = new WP_Query( array(
            'post_type' => $post_type_slug,
            'posts_per_page' => 5, // 表示させたい記事数
            'tax_query' => array(
                array(
                    'taxonomy' => $taxonomy_slug,
                    'terms' => $term->slug,
					'field' => 'slug',
                    )
                )
            ));
		
		if( $my_query->have_posts() ){
			while( $my_query->have_posts() ){
				$my_query->the_post();
				 echo '<h4>'.get_the_title().'</h4>';
			}
		}
		wp_reset_postdata();	
	}
}

基本的には上のコードをコピペすれば使えるはずです。