WordPress でプラグインを使わずに、カスタムフィールドを使って meta 要素の「description」と「keywords」を出力する。
以下を functions.php に記述すると、「キーワード:このページのキーワードを入力してください。…」というような独自のカスタムフィールドを追加できる。詳細は「編集画面に独自のカスタムフィールドの入力項目を追加する」、「特定のページにだけメタボックスを追加する」を参照。
- function add_my_box() {
- //固定ページ(page)にメタボックスを追加
- add_meta_box('meta_info', 'ページ情報', 'meta_info_form', 'page', 'normal', 'high');
- //カスタム投稿タイプ(works)にメタボックスを追加
- add_meta_box('meta_info', 'ページ情報', 'meta_info_form', 'works', 'normal', 'high');
- }
- add_action('add_meta_boxes', 'add_my_box');
- //メタボックス(カスタムフィールド)に表示する内容
- function meta_info_form() {
- global $post;
- wp_nonce_field(wp_create_nonce(__FILE__), 'my_nonce');
- ?>
- <div id="meta_info">
- <p><label>キーワード:このページのキーワードを入力してください。複数記入する際には半角のカンマ(,)で区切ってください。<br />
- <input type="text" name="meta_keywords" value="<?php echo esc_html(get_post_meta($post->ID, 'meta_keywords', true)); ?>" style="width:80%" />
- </label></p>
- </div>
- <p><label>説明:このページの説明を入力してください。(60~120文字前後)<br />
- <input type="text" name="meta_description" value="<?php echo esc_html(get_post_meta($post->ID, 'meta_description', true)); ?>" style="width:80%" />
- </label></p>
- <?php
- }
- //カスタムフィールド(メタボックス)に入力された内容の更新などの処理
- function my_box_save($post_id) {
- global $post;
- $my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null;
- if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) {
- return $post_id;
- }
- if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
- if(!current_user_can('edit_post', $post->ID)) { return $post_id; }
- if($_POST['post_type'] == 'works'){
- update_post_meta($post->ID, 'meta_keywords', $_POST['meta_keywords']);
- update_post_meta($post->ID, 'meta_description', $_POST['meta_description']);
- }
- if($_POST['post_type'] == 'page'){
- update_post_meta($post->ID, 'meta_keywords', $_POST['meta_keywords']);
- update_post_meta($post->ID, 'meta_description', $_POST['meta_description']);
- }
- }
- add_action('save_post', 'my_box_save');
上記の記述で固定ページとカスタム投稿タイプのページでは「キーワード」と「説明」の値を入力できるようになったが、フロントページ、ブログのトップページやカスタム投稿タイプのカスタムタクソノミーのアーカイブページは個別のページを持たないため、編集画面からそれらの値を入力することはできない。
それらのページの「キーワード」と「説明」は head 要素内で直接記述する。
- </title>// title 要素の後に記述
- <?php if(is_front_page()): ?> //フロントページの場合
- <meta name="description" content="フロントページの説明" />
- <meta name="keywords" content="フロントページのキーワード" />
- <?php elseif(is_page() || is_singular('works')): ?> //固定ページとカスタム投稿タイプの場合
- <?php
- //カスタムフィールドの値を取得
- $meta_description = get_post_custom_values('meta_description', $post->ID);
- $meta_keywords = get_post_custom_values('meta_keywords', $post->ID);
- ?>
- <?php if($meta_description[0]): ?>//取得した値(配列の最初の要素)が空なければ出力
- //出力する際は esc_attr でエスケープ処理をする(trim で前後のホワイトスペースを削除)
- <meta name="description" content="<?php echo esc_attr(trim($meta_description[0])); ?>" />
- <?php endif; ?>
- <?php if($meta_keywords[0]): ?>//取得した値(配列の最初の要素)が空なければ出力
- <meta name="keywords" content="<?php echo esc_attr(trim($meta_keywords[0])); ?>" />
- <?php endif; ?>
- <?php else: ?>
- <?php if(is_home() && !is_front_page()): ?> //ブログのトップページの場合
- <meta name="description" content="ブログのトップページの説明" />
- <meta name="keywords" content="ブログのトップページのキーワード" />
- <?php elseif(is_tax('works_cat', 'crystal')): ?> //カスタムタクソノミーのアーカイブページの場合
- <meta name="description" content="カスタムタクソノミーのアーカイブページの説明" />
- <meta name="keywords" content="カスタムタクソノミーのアーカイブページのキーワード" />
- <?php endif; ?>
- <?php endif; ?>