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を使ったホームページ制作、機能追加や設置代行などの改修、システム開発、サイトの保守を手掛けております。
アナタが実現させたい機能、やりたい事をお聞かせいただけませんか? そのイメージを一緒に実現しましょう!
お問い合わせは以下のページから!!