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