今回は不要なヘッダーを除去してみます。
またまた時間が空いてしまってすみません・・・ orz
WordPress では、wp_head アクション実行時に、head タグ内に
色々なヘッダーを自動で出力してくれます。
・・・が、(自分的には) 不要だと感じるものも多々あり、
今回はこれを出力しないようにしたいと思います。
function.php に不要なヘッダーを除去するためのコードを追加します。
(どのような仕事をするヘッダーを除去しているのかはコメント部を見てください)
//--- スクリプトの整理 function load_scripts(){ // 管理画面アクセス時は除外 if (!is_admin()) { //-- 不要なヘッダーの除去 remove_action('wp_head', 'feed_links', 2 ); // サイト全体のRSSフィードURL remove_action('wp_head', 'feed_links_extra', 3 ); // (カテゴリ等の)その他のRSSフィードURL remove_action('wp_head', 'rsd_link' ); // 外部ツール(RSDプロトコル)を使ったブログ更新用URL remove_action('wp_head', 'wlwmanifest_link' ); // Windows Live Writerを使った記事投稿URL(Windows Live Writerを使う場合は必要) remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); // 表示ページの前後の記事URL(Firefox等ではブラウザが先読みするためサーバ負荷になる) remove_action('wp_head', 'parent_post_rel_link' , 10, 0); // 表示ページの親記事URL(Firefox等ではブラウザが先読みするためサーバ負荷になる) remove_action('wp_head', 'start_post_rel_link' , 10, 0); // 表示ページの開始記事URL(Firefox等ではブラウザが先読みするためサーバ負荷になる) remove_action('wp_head', 'index_rel_link' ); // 表示ページのインデックス(索引)を示すリンクタグ remove_action('wp_head', 'wp_generator' ); // WordPressバージョン情報 remove_action('wp_head', 'wp_shortlink_wp_head' , 10, 0); // ?p=[投稿ID]という形式のデフォルトパーマリンクURL } } add_action('init', 'load_scripts');
さて、解説します。
まず、スクリプトを整理するための関数 load_scripts を作成し、
その中に remove_action 関数 を使って
出力ヘッダーを除去する処理を記述します。
そして、この作成した関数を、add_action 関数を使って
WordPress にアクション関数として追加してやります。 (18行目)
第一パラメータは ‘init’ を、第二パラメータには作成した関数を指定して、
初期化処理が走る際に、関数内の処理を走らせてやるようにします。
これで、不要なヘッダーが出力されないようになります。
ヘッダーを除去するための具体的な処理を見てみましょう。
4行目では、is_admin 関数を使って管理者ページがどうかを判定し、
ユーザ向けページの場合のみ処理をするようにしています。
6~15行目では、remove_action 関数を使って
ヘッダーを出力するアクションフックを除去しています。
今回は wp_head アクションで出力されるタグを除去しますので、
第一パラメータは ‘wp_head’ を、第二パラメータには除去したい関数名を指定します。
第三パラメータには関数の優先度を、第四パラメータには関数が受け入れる
引数の数を指定します。
はて、第二パラメータから第四パラメータまでは、具体的に何を指定したら
いいのでしょう?
答えは wp-includes/default-filters.php にあります。
WordPress 本体の内部処理 (以下に記載のソースコードは WordPress 3.9) で
wp_head アクション時に関数実行がフックされているものの中で、
(自分には) 不要だと思うものを除去してやればいいんですね!
// Actions add_action( 'wp_head', 'wp_enqueue_scripts', 1 ); add_action( 'wp_head', 'feed_links', 2 ); add_action( 'wp_head', 'feed_links_extra', 3 ); add_action( 'wp_head', 'rsd_link' ); add_action( 'wp_head', 'wlwmanifest_link' ); add_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 ); add_action( 'wp_head', 'locale_stylesheet' ); add_action( 'publish_future_post', 'check_and_publish_future_post', 10, 1 ); add_action( 'wp_head', 'noindex', 1 ); add_action( 'wp_head', 'wp_print_styles', 8 ); add_action( 'wp_head', 'wp_print_head_scripts', 9 ); add_action( 'wp_head', 'wp_generator' ); add_action( 'wp_head', 'rel_canonical' ); add_action( 'wp_footer', 'wp_print_footer_scripts', 20 ); add_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 ); add_action( 'template_redirect', 'wp_shortlink_header', 11, 0 ); add_action( 'wp_print_footer_scripts', '_wp_footer_scripts' ); add_action( 'init', 'check_theme_switched', 99 ); add_action( 'after_switch_theme', '_wp_sidebars_changed' ); if ( isset( $_GET['replytocom'] ) ) add_action( 'wp_head', 'wp_no_robots' );
※今回記述の function.php のサンプルでは、WordPress 3.9 では定義されていないものもありますが、
以前のバージョンとの互換のために記載していますので若干の差異があります。
ただし、中には、消してしまうと、プラグインによっては上手く動かないものが
ありますので、注意してください。
では今回はこれまで。