WordPressのカスタムフィールドへポストIDを自動出力する

クライアントからの要望で、商品管理番号としてポストIDを活用し、そのIDの数字を検索対象とすることになりました。

記事作成者のスキルがそれほど高くないことからポストIDは自動出力である(記事作成者に入力させない)ことと、検索対象とするためにカスタムフィールドを経由して出力することが必要となります。

  1. 手順1 フィールド名「post2id」のカスタムフィールドを作成
  2. 手順2 function.phpに記述
  3. 手順3 記事出力
  4. (おまけ)カスタムフィールドを検索対象とする方法

手順1 フィールド名「post2id」のカスタムフィールドを作成

  1. プラグイン「Advanced Custom Fields」をインストール
  2. フィールドグループを作成し、ポスト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」を使う

  1. プラグイン「WP Extended Search」をインストール
  2. 設定「Select Meta Key Names」より検索対象に含めたいメタキーの名前を選択。

書いた人:やまライダー(嫁)

Web屋さんで8時間フルタイム勤務をしている、いわゆるワーキングマザー。
夫婦共働きで、ムスメ氏を育てています。
主に資産運用にかかわるお金の話、ムスメ氏を育てていく上での子育ての話、そしてたまにお仕事関連の記事を書いていく予定。
プロフィールを見る