WordPress の便利なfunctions.phpファイルがあります。 これに記述するだけで、いろんなことができます。今回は、functions.php に書いておくと便利なコードまとめてみました。
photo credit: Saad Irfan via photopin cc
ページコンテンツ
プラグイン導入すれば解決?
たしかにプラグインを導入すれば解決するものもありますが、プラグインを導入しすぎると表示に時間がかかったり、またプラグイン同士がぶつかり合って機能しないということもありますのでfunctions.phpに書き込んで実現できるものはなるべく書き込むようにしてます。
WordFes Nagoya 2014の「WordPressのデータベース&パフォーマンス入門」のセッションに参加してきたでプラグインを導入するとデータベースのwp_optionsに書き込まれるプラグインもあって、便利だからプラグインを導入しては、削除の繰り返しなどしているとwp_optionsが大きくなってサイトが重くなる原因にもありますということを聞いてプラグイン導入には慎重にならないといけないなと勉強になりました。
サイト表示が遅いとユーザーが離脱することもありますし、今はスマートフォンからサイトを見る人が多くなりましたので表示に時間がかかると致命的です。
人気ランキング系表示のプラグインは注意
プラグインによりますがサーバーに負荷をかけてランキングを表示させているものもあります。便利だから自動で「今日の人気ページ」「今月の人気ページ」など表示できるプラグインありますがサーバーに負荷をかけているかもしれません。
サーバーに負荷をかけずに表示させるオススメの方法は
- Google Analytics APIを使う
- jetpackを使う
- 手動で書き込む
この辺を使えばサーバーに負荷をかけずにすみます。
ちなみにこのサイトの人気記事は、手動で月に一回sidebar.phpのファイルを書き変えてます。
話がそれましたので元に戻ります。
functions.phpのファイルに書いておくと便利なコード
ヘッダー不要なタグ削除
自動でヘッダーに入るのやめてほしいんだけどね。他にもありますがこれぐらいは削除してても大丈夫でしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//サイト全体へのfeed出力の削除 remove_action('wp_head', 'feed_links', 2); //その他のフィード(カテゴリー等)へのリンクを削除 remove_action('wp_head', 'feed_links_extra', 3); //外部ツールを使ったブログ更新用のURLを削除 remove_action('wp_head', 'rsd_link'); //WordPressのバージョン情報を削除 remove_action('wp_head', 'wp_generator'); //rel="index"削除 remove_action('wp_head', 'index_rel_link'); //?p=[投稿ID]形式のパーマリンクのURLを削除 remove_action('wp_head', 'wp_shortlink_wp_head'); |
アイキャッチ
ページ上にサムネイル画像を表示させるための機能です。
プラグインでもありますが数行のコードで出来ますので良く使います。
1 |
add_theme_support( 'post-thumbnails' ); |
moreリンク削除
WordPressで「続きを読む」のリンクを追加する場合に追加したい箇所にを記述すればいいのですが、デフォルトの設定だとリンクURLが
http://000.com/0000/000#more-○○○(※○○○は数字が入る)
と入ってします。このmoreリンクを削除します。
1 2 3 4 5 |
function custom_content_more_link( $output ) { $output = preg_replace('/#more-[\d]+/i', '', $output ); return $output; } add_filter( 'the_content_more_link', 'custom_content_more_link' ); |
ファビコン追加
直接header.phpに書き込んでもいいのですが一元管理をしたいのでfunctions.phpに書き込んでます。
1 2 3 4 |
function add_favicon_link(){ ?> <link rel="shortcut icon" href="<?php bloginfo('stylesheet_directory'); ?>/img/favicon.ico" />; <?php } add_action('wp_head', 'add_favicon_link'); |
ログインエラーを表示させない
ログイン画面で、パスワードを間違えると親切に「パスワードを入力してください」って教えてくれます。ブログの管理者ならいいのですが、第3者に対して親切に「ユーザー名を入力してください」「パスワードを入力してください」ってエラーを教えるのは良くないですね。
なので、エラーを表示させないようにします。
1 |
add_filter('login_errors', create_function('$a', 'return null;')); |
ページャー機能
ページャーを実現するためにプラグインで「WP-PageNavi」などがありますね。
少しでも表示を早くするためにプラグインを使わないでfunctions.phpにコードを書く方がいいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function kriesi_pagination($pages = '', $range = 2) { $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages) { $pages = 1; } } if(1 != $pages) { echo "<div class='pagination'>"; if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>«</a>"; if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹</a>"; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>"; } } if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>›</a>"; if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>»</a>"; echo "</div>\n"; } } |
参考URLWordPressにプラグイン無しでページネーションを設置する方法
セルフピンバックの禁止
セルフピンバックとは?
ワードプレスには、リンクを張ったことをリンク先に自動で通知するピンバックという機能があります。
このピンバックの送受信を許可する設定にしていると、記事内で自サイト内へのリンク(例えば記事の紹介など)を張った際にピンバックを自サイトに対して送信してしまう場合があります。
ここから先では、このようなセルフピンバックが起こらないようにする4つの対処法を紹介していきます。
参考URLWordPressでセルフピンバックを無効にする4つの方法
1 2 3 4 5 6 7 |
function no_self_ping( &$links ) { $home = home_url(); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]); } add_action( 'pre_ping', 'no_self_ping' ); |
自分がログイン中はGoogle AnalyticsGoogleを読み込ませない
自分が一番のブログのファンであります。
ログインして記事を書いたり、書き直したりしているとアナリティクスにカウントされてしまうので自分がログインしているときはGoogle AnalyticsGoogleを読み込ませないようにします。
1 2 3 4 5 6 7 8 9 10 11 |
if (!is_user_logged_in()) { function analytics() { $ga = <<<ANALYTICS ここにアナリティクスのコードを書いてください。 ANALYTICS; echo $ga . "\n"; } add_action('wp_footer', 'analytics'); } |
モバイル用(スマートフォン用)の条件分岐設定
最近のアクセスを確認するとスマートフォンからのアクセスが多いです。
ユーザーエージェントを切り替えてスマフォの時には「この広告を表示させてたい」、PC版には「このバナーを表示させたい」など出てきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function is_mobile(){ $useragents = array( 'iPhone', // iPhone 'iPod', // iPod touch 'Android', // 1.5+ Android 'dream', // Pre 1.5 Android 'CUPCAKE', // 1.5+ Android 'blackberry9500', // Storm 'blackberry9530', // Storm 'blackberry9520', // Storm v2 'blackberry9550', // Storm v2 'blackberry9800', // Torch 'webOS', // Palm Pre Experimental 'incognito', // Other iPhone browser 'webmate' // Other iPhone browser ); $pattern = '/'.implode('|', $useragents).'/i'; return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']); } |
使い方は下記の「モバイル用(スマートフォン用)の条件分岐設定」に書かれています。
contents widthの指定
設定に関係なくテーマに最適な横幅の画像を自動的に生成することができます。
1 2 |
//contents widthの指定 if ( ! isset( $content_width ) ) $content_width = 546; |
参考URLWordPressテーマのfunctions.phpでは$content_widthを定義するべし
複数人で運用する場合にfunctions.phpのファイルに書いておくと便利なコード
アドミンバーを消す
複数人で管理数場合、わたしは気になりませんが中にはアドミンバーが気になる人がいたので消す方法です。
1 2 3 4 |
function disable_admin_bar(){ return false; } add_filter( 'show_admin_bar' , 'disable_admin_bar'); |
アドミンバー、プラグインが上手くいかない場合は
header.phpとfooter.phpに<?php wp_head(); ?>と<?php wp_footer(); ?>が記述されているか確認してください。
プラグインが上手くいかないとか、アドミンバーが表示されない原因の理由がこれです。
管理者以外にアップデートのお知らせ非表示
アップデートのお知らせが表示されると勝手にアップデートされては困る場合があります。
サイトの最高責任者が更新を書ければいいので管理者意外にはアップデートのお知らせは非表示にしたい場合です。
1 2 3 4 5 6 |
if (!current_user_can('edit_users')) { function wphidenag() { remove_action( 'admin_notices', 'update_nag'); } add_action('admin_menu','wphidenag'); } |
サイトバーの項目を非表示にする
クライアントには投稿以外触られたくない!というときに使える方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if (!current_user_can('edit_users')) { function remove_menu() { remove_menu_page('index.php'); // ダッシュボード remove_menu_page('edit.php'); // 投稿 remove_menu_page('upload.php'); // メディア remove_menu_page('link-manager.php'); // リンク remove_menu_page('edit.php?post_type=page'); // 固定ページ remove_menu_page('edit-comments.php'); // コメント remove_menu_page('themes.php'); // 外観 remove_menu_page('plugins.php'); // プラグイン remove_menu_page('users.php'); // ユーザー remove_menu_page('tools.php'); // ツール remove_menu_page('options-general.php'); // 設定 } add_action('admin_menu', 'remove_menu'); } |
管理画面のロゴ
管理画面の左上にあるWordPressのロゴをオリジナルのロゴに変えたい場合
1 2 3 4 5 6 |
function my_custom_logo() { echo '<style type="text/css"> #header-logo { background-image: url('.get_bloginfo('template_directory').'/images/custom-logo.gif) !important; } </style>'; } add_action('admin_head', 'my_custom_logo'); |
ログイン画面のロゴ
ログイン画面のWordPressのロゴを変えたい場合
1 2 3 4 5 |
function my_custom_login_logo() { echo '<style type="text/css"> h1 a { background-image:url('.get_bloginfo('template_directory').'/images/custom-login-logo.gif) !important; } </style>'; } add_action('login_head', 'my_custom_login_logo'); |
まとめ
何でもプラグインでやってしまうとDBが圧迫されてしまいますので、できるかぎりfunctions.phpに書き込める記述があったら書いたほうがサイト表示も若干早くなります。
本当にありがとうございます。