WordPressのカスタマイズやテーマファイル、プラグインの作り方などデータベース構造から詳しく解説します。

All in One SEO Packを使わずにtitleとh1を分けて投稿する方法

All in One SEO Pack

ALL in ONE SEO Packはご存知でしょうか?
WordPressでSEOを担当している方なら誰もが知っているプラグインです!!
(これを見るとわかりやすいです! ALL in One SEO Packの使い方)

ALL in One SEO Packの便利な機能の1つとしてページtitleと記事title(h1)を別々に設定ができるというのがあります。
今回は、その機能をプラグインを使わずに自作してみようと思います!!!
なんでそんなことするの?と思うかもしれませんが、やはりプラグインを入れると重くなってしまうのとエラーが起きる可能性があるという懸念点がありました。
そして追加機能を頼まれたのが「h1とtitleを分けて設定できるようにしてほしい。かつ、寄稿者権限の場合は見れなくしてほしい。」とのことでしたので自作をすることにしました!!

カスタムフィールドを自作して機能を実装

どんどん記載していきます!!
結構簡単に作れるので、コード内にコメントを書き込んでいきますね!
最終的にはこんな投稿画面にこんなフィールドができます!
スクリーンショット 2015-04-05 13.41.15

h1を入力するフィールドを作成

まずはh1を入力できるようにカスタムフィールドを作成しようと思います!

// functions.phpに記載

// 投稿画面にtitleを入力するカスタムフィールドを作成
add_action( 'admin_menu', 'add_custom_fields' );
add_action( 'save_post', 'save_custom_fields' );

// メタに追加
function add_custom_fields() {
add_meta_box('my_sectionid', '大見出し(h1)', 'my_custom_fields', 'post' );
}

// h1タグの入力フォームを作成
function my_custom_fields() {
global $post;
$h1 = get_post_meta($post->ID, 'h1', true);

echo '<p>大見出し(h1)を入力してください</p>';
echo '<p><input type="text" name="h1" value="' .esc_html($h1). '" size="50" ></p>';
}

// フォームから受け取ったh1をメタにアップデート
function save_custom_fields( $post_id ) {
if(!empty($_POST['h1'])) {
update_post_meta($post_id, 'h1', $_POST['h1']);
} else {
delete_post_meta($post_id, 'h1');
}
}

これでh1を設定するカスタムフィールドは作成されました!!しかし、まだ反映させることはできません。
なぜならsingle.phpに記載していないからです!!!!!

投稿されたtitleを受け取る

// singe.phpに記載

// h1タグを見つけ、それを以下に書き換えます
<?php $custom = get_post_custom(); ?>
<?php if(empty($custom['h1'])){ $custom['h1'][0] = get_the_title(); } ?>
<h1><?php echo $custom['h1'][0]; ?></h1>

これでカスタムフィールドで入力されたh1を受け取ることができるようになりました!!!
しかし、僕の仕事はまだ終わってません。
「h1とtitleを分けて設定できるようにしてほしい。かつ、寄稿者権限の場合は見れなくしてほしい。」と頼まれておりますので、これを寄稿者権限の時には非表示にしなければならないのです!!

寄稿者権限でのログイン時は非表示

// functions.phpに記載
add_action( 'admin_menu', 'post_edit_h1' );
function post_edit_h1() {
if ( ! current_user_can( 'level_10' ) ) {
remove_meta_box('my_sectionid', 'post', 'advanced');
}
}

これで寄稿者権限でのログイン時は非表示にできたかと思います!
どうでしたでしょうか?割と簡単ですよね!!でもSEOを意識して投稿する方にとってはとても便利なカスタマイズだったかと思います。WordPressをカスタマイズするならカスタムフィールドは欠かせないですね!

関連記事

ページ上部へ戻る