WordPressのカスタムフィールドへポストIDを自動出力する
クライアントからの要望で、商品管理番号としてポストIDを活用し、そのIDの数字を検索対象とすることになりました。
記事作成者のスキルがそれほど高くないことからポストIDは自動出力である(記事作成者に入力させない)ことと、検索対象とするためにカスタムフィールドを経由して出力することが必要となります。
手順1 フィールド名「post2id」のカスタムフィールドを作成
- プラグイン「Advanced Custom Fields」をインストール
 - フィールドグループを作成し、ポストID入力フィールドを作成
 
手順2 function.phpに記述
/** カスタムフィールドにポストID自動出力 **/
function add_meta_id() {
	global $post;
	if($post->post_type === 'post'){
	//if($post->post_type === '投稿タイプ名'){//カスタム投稿の場合
		if(!update_post_meta($post->ID, 'post2id', $post->ID)){
			add_post_meta($post->ID, 'post2id', $post->ID);
		}
	}
}
add_action('admin_head-post-new.php', 'add_meta_id');
手順3 記事出力
<?php $postID = '';
$postID = get_field('post2id');
if($postID) {
	echo '商品管理番号:'. $postID;
} ?>
(おまけ)カスタムフィールドを検索対象とする方法
WordPressのデフォルト検索機能ではカスタムフィールドは検索対象外です。
そこでカスタムフィールドを検索対象とするために、ひと手間加えましょう。
方法は2つあります。function.phpへ記述するか、プラグインを使うか、です。
functions.phpに記述
function custom_search($search, $wp_query) {
	global $wpdb;
	if (!$wp_query->is_search)
			return $search;
	if (!isset($wp_query->query_vars))
			return $search;
	$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
	if(count($search_words) > 0) {
			$search = '';
			$search .= "AND post_type = 'post'";
			foreach($search_words as $word) {
					if(!empty($word)) {
							$search_word = '%' . esc_sql($word) . '%';
							$search .= " AND (
								 {$wpdb->posts}.post_title LIKE '{$search_word}'
								OR {$wpdb->posts}.post_content LIKE '{$search_word}'
								OR {$wpdb->posts}.ID IN (
								SELECT distinct post_id
								FROM {$wpdb->postmeta}
								WHERE meta_value LIKE '{$search_word}'
								)
							) ";
					}
			}
	}
	return $search;
}
add_filter('posts_search','custom_search', 10, 2);
プラグイン「WP Extended Search」を使う
- プラグイン「WP Extended Search」をインストール
 - 設定「Select Meta Key Names」より検索対象に含めたいメタキーの名前を選択。
 
MovableType/WordPressを使ったホームページ制作、機能追加や設置代行などの改修、システム開発、サイトの保守を手掛けております。
アナタが実現させたい機能、やりたい事をお聞かせいただけませんか? そのイメージを一緒に実現しましょう!
お問い合わせは以下のページから!!