WordPress functions.phpでのカスタマイズ ~管理画面・出力編~
Index
― 目次 ―まずは、よく使う「管理画面の表示変更」からご紹介します(※目次01~06の項目です)。
ログイン画面のロゴ変更
デフォルトのWordPressでは、WordPressのロゴが表示されますので、クライアントさんの会社ロゴなどに変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// ログイン画面のロゴ変更 function login_logo_change() { echo '<style type="text/css"> /* ロゴ画像 */ .login h1 a { width:80px; height:80px; background-image:url('.get_template_directory_uri().'/image/logo.png); background-size:100%; } </style>'; } add_action( 'login_head', 'login_logo_change' ); |
3~11行目がロゴ画像の指定。CSSで使用するロゴ画像を指定します。
6~7行目でロゴ画像のサイズを指定、8行目でテンプレートディレクトリからのロゴ画像のパスを背景で指定します。
以下のような感じでロゴ画像が変更されます(※当事務所のロゴの場合)。
- ログイン画面のロゴ変更 -
ロゴを変更するだけで、コーポレートサイトっぽいログイン画面になりますね。
ログイン画面のロゴのリンク先をホームページのURLに変更
デフォルトのWordPressのロゴは「https://ja.wordpress.org」へリンクされてますので、ホームページのURLにリンク先を変更します(※WordPressで構築しているWebサイトのURLに変更)。
1 2 3 4 5 |
// ログイン画面のロゴのリンク先をホームページのURLに変更 function custom_login_logo_url() { return home_url(); } add_filter( 'login_headerurl', 'custom_login_logo_url' ); |
3行目がリンク先をホームページのURLに指定。
WordPressの管理画面の[設定]→[一般設定]→[サイトアドレス(URL)]で指定したURLです。
「get_bloginfo(‘url’)」は非推奨なようなので、「home_url()」を使いましょう。
3行目に「return ‘絶対パスのURL’;」を記述すると、管理画面で指定した「サイトアドレス(URL)」以外のURLを指定することもできます。
WordPressのアップデート情報を非表示:管理者以外
クライアントさんに「新規制作やリニューアルでWebサイトを納品」した場合、保守契約もお願いいただければよいのですが、自社担当者さんが更新をされるような場合、なかなかWordPressのアップデートの対応までしていただけることは稀です(※WordPressの大幅なアップデートが実施された場合、プラグインが動かなくなったり、PHPのバージョンが変更されたりする場合もあるためです)。
ですが、管理画面内にはWordPressのアップデート情報が表示されますので、変な不安感をあおってしまう恐れもありますよね。
そんな時に利用できるのが以下の記述です。
1 2 3 4 |
// WordPressのアップデート情報を非表示:管理者以外 if (!current_user_can( 'administrator' )) { add_filter( 'pre_site_transient_update_core', '__return_null' ); } |
2行目が「管理者以外」を指定(※管理者以外の権限である編集者や投稿者などに適応されます=アップデート情報は表示されません)。
3行目が「WordPressのアップデート情報を非表示」です。
プラグインのアップデート情報を非表示:管理者以外
プラグインのアップデート情報に関しても非表示にすることができます。
WordPressのアップデート情報と同じく、管理者以外に適応します。
1 2 3 4 |
// プラグインのアップデート情報を非表示:管理者以外 if (!current_user_can( 'administrator' )) { add_filter( 'pre_site_transient_update_plugins', '__return_null' ); } |
2行目が「管理者以外」を指定(※管理者以外の権限である編集者や投稿者などに適応されます=アップデート情報は表示されません)。
3行目が「プラグインのアップデート情報を非表示」です。
投稿の表示を変更
WordPressは、ブログのCMSのため、アーカイブ出力されるページは「投稿」という文字が割り当てられています。
ですが、コーポレートサイトなどでは、違和感を感じます…。そこで「投稿」→「ニュース」に変更します。
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 |
// 投稿の表示を変更 function Change_menulabel() { global $menu; global $submenu; $name = 'ニュース'; $menu[5][0] = $name; $submenu['edit.php'][5][0] = $name.'一覧'; $submenu['edit.php'][10][0] = '新規'.$name.'投稿'; } function Change_objectlabel() { global $wp_post_types; $name = 'ニュース'; $labels = &$wp_post_types['post']->labels; $labels->name = $name; $labels->singular_name = $name; $labels->add_new = _x('追加', $name); $labels->add_new_item = $name.'の新規追加'; $labels->edit_item = $name.'の編集'; $labels->new_item = '新規'.$name; $labels->view_item = $name.'を表示'; $labels->search_items = $name.'を検索'; $labels->not_found = $name.'が見つかりませんでした'; $labels->not_found_in_trash = 'ゴミ箱に'.$name.'は見つかりませんでした'; } add_action( 'init', 'Change_objectlabel' ); add_action( 'admin_menu', 'Change_menulabel' ); |
5行目と12行目の「ニュース」を「お知らせ」などに書き換えることで、他の文字に変更することができます。
投稿画面にタグ一覧のチェックボックスを追加
WordPressのカテゴリーは、投稿画面からカテゴリーをチェックすることもできますし、新規にカテゴリーを追加することもできます。
ですが、タグはできません…。そこで「タグ一覧のチェックボックス」を表示されるようにします。
1 2 3 4 5 6 7 8 |
// 投稿画面にタグ一覧のチェックボックスを追加 function re_register_post_tag_taxonomy() { $tag_slug_args = get_taxonomy('post_tag'); $tag_slug_args->hierarchical = true; $tag_slug_args->meta_box_cb = 'post_categories_meta_box'; register_taxonomy('post_tag', 'post', (array) $tag_slug_args); } add_action( 'init', 're_register_post_tag_taxonomy', 1 ); |
タグの数が増えてしまった場合でも、「タグを検索」のボックスに文字を入力すると該当するタグのみが表示されるので便利です。
- タグを検索 -
次は、「デフォルトのWordPressが行う出力のカスタマイズ」をご紹介します(※目次07~12の項目です)。
「パーマリンクの変更」と「HTMLに出力される記述」のカスタマイズです。
URLからcategoryを削除
「パーマリンクの変更」その1は「URLからcategoryを削除」です。
デフォルトのWordPressでは、カテゴリーに登録すると以下のようなURLになります。
https://www.ドメイン/category/カテゴリーのスラッグ/
普通に考えると「category」の文字列は不要です。そんな時に活用できるカスタマイズです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// URLからcategoryを削除 function rename_cat_function($link) { return str_replace( "/category/", "/", $link ); } add_filter( 'user_trailingslashit', 'rename_cat_function' ); function rename_cat_flush_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } add_action( 'init', 'rename_cat_flush_rules' ); function rename_cat_rewrite($wp_rewrite) { $new_rules = array( '(.+)/page/(.+)/?' => 'index.php?category_name='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_filter( 'generate_rewrite_rules', 'rename_cat_rewrite' ); |
3行目の「str_replace」が「検索文字列に一致したすべての文字列を置換する」といったもの。
この場合「/category/」→「/」に置換するので、URLから「category」の文字列を削除することができます。
ここで、WordPressの仕様上、2つ注意点があります。
- カテゴリーと固定ページのスラッグは同じにしない
今回「category」の文字列を削除していますので、同じスラッグにしてしまうと「同一のURLになってしまう」ためです(※この場合、固定ページが優先して表示されます)。 - WordPressで設定するパーマリンクには「基本」か「カスタム構造」を選択する
基本:https://www.ドメイン/?p=123
カスタム構造:https://www.ドメイン/%category%/%postname%/ など
「基本」は、URLにパラメーターが付加されるのでおすすめしません…。そうすると「カスタム構造」を利用するわけですが、WordPressのバージョン5.4からでしょうか?「投稿ページ(single.php)のパーマリンクに日付が入っていると、アーカイブページ(archive.php)として認識される」という仕様に変更されているようです。これはどういうことかというと「投稿ページをsingle.phpで表示したいのに、archive.phpとして表示しようとするので不具合が発生する」といったものです。当時、これを解決するのに苦労した覚えがあります…。
※「wordpress.org(core.trac.wordpress.org)」参照(Google翻訳で日本語表示にして「メッセージ」の箇所をご覧ください)
結論からいいますと、今回のケースでは、上記のように「/%category%/%postname%/」としておくと問題はなさそうです。
※パーマリンクに「カテゴリーを含める」と「ポストネームにする」点がポイントです(categoryを削除するためカテゴリーを含めておく必要がある+日付入りのアーカイブページとして認識されないようにする必要がある)。
※もう少し複雑なカスタマイズを施せば、当サイトのようなURLも可能ですが、functions.phpのみでは対応できなかったため割愛します。
投稿ページ以外のURLの最後にスラッシュを追加
「パーマリンクの変更」その2は「投稿ページ以外のURLの最後にスラッシュを追加」です。
これはどういうことかというと「固定ページのURLの最後に/(スラッシュ)を入れたい」かつ「投稿ページ以外の他のページのURLの最後に/(スラッシュ)を入れたい」を実現するためのカスタマイズです。
1 2 3 4 5 6 7 8 |
// 投稿ページ以外のURLの最後にスラッシュを追加 function ex_trailingslashit($string, $url_type) { if ($url_type != 'single'){ $string = trailingslashit($string); } return $string; } add_filter( 'user_trailingslashit', 'ex_trailingslashit', 10, 2 ); |
3行目が「投稿ページは除外する」といった内容。
4行目が「trailingslashit関数で末尾に/(スラッシュ)を追加する」といった内容です。
※「wordpress.org(developer.wordpress.org)」参照(Google翻訳で日本語表示にしてご覧ください)
WordPressの自動整形機能の無効化
こちらは、WordPressユーザーなら知っている?「ビジュアルエディタでEnterキーで改段落(pタグが挿入される)、Shift+Enterキーで改行(brタグが挿入される)」という自動整形機能の無効化です。
私の場合、コードエディタ(HTMLで記述)しか使いませんが「ビジュアルエディタ⇔コードエディタの切り替えでも自動整形されてしまいます」ので、常に無効化しています。
「ビジュアルエディタ自体表示させたくない!」ということであれば、[ユーザー]→[プロフィール]→[ビジュアルエディタ]→[ビジュアルリッチエディタを使用しないにチェック]すると、「コードエディタしか表示されなくなりますので、切り替えでの自動整形は無効化」されます。
1 2 |
// WordPressの自動整形機能の無効化 remove_filter( 'the_content', 'wpautop' ); |
2行目が「本文入力欄での自動整形機能の無効化」です。
WordPressのバージョン情報を削除
WordPressで構築されたWebサイトをブラウザの「ページのソースを表示」などで見てみると、metaタグ箇所に「WordPress ○.○.○」と表示されます。最新バージョンを利用しているかが直ぐに分かってしまいますので、こちらの表示を削除します(※セキュリティ面に配慮されているWebサイトかが直ぐに分かってしまいます→WordPressのバージョンは、常に最新バージョンにしておくように心がけましょう)。
1 2 |
// WordPressのバージョン情報を削除 remove_action('wp_head', 'wp_generator'); |
2行目が「WordPressのバージョン情報を削除」です。
その他のバージョン情報を削除
プラグインが出力するJavaScriptやCSSファイルのパスにもバージョンが表示されますので、そちらも削除します。
1 2 3 4 5 6 7 8 |
// その他のバージョン情報を削除 function vc_remove_wp_ver_css_js( $src ) { if ( strpos( $src, 'ver=' ) ) $src = remove_query_arg( 'ver', $src ); return $src; } add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 ); add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 ); |
「WordPressのバージョン情報を削除」と組み合わせると、プラグインなどが出力するソース上のバージョン表示も削除できます。
WordPressの絵文字出力の無効化
コーポレートサイトなどは、絵文字を使用することはないと思いますので、head内に出力される絵文字出力を無効化します。
1 2 3 4 5 6 7 |
// WordPressの絵文字出力の無効化 function wp_disable_emojis() { remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'wp_enqueue_scripts', 'wp_enqueue_emoji_styles' ); } add_action( 'init', 'wp_disable_emojis' ); |
3行目が「headタグ内に出力されるインラインスクリプトの無効化」。
4行目が「headタグ内に出力されるインラインスタイルの無効化」。
5行目は「WordPressのバージョン6.4からprint_emoji_stylesが非推奨」となりましたので記述しています。
※下位互換のため「print_emoji_styles」も保持されています
「functions.phpでの管理画面・出力のカスタマイズ」についてご紹介しました。
一度準備しておくと、別サイトでも使いまわせる箇所も多いため便利ですよ。
WordPressは、基本ブロクのCMSですので、カスタマイズの依頼を受ける場合も多いですよね。
コーポレートサイトとして利用する場合、「投稿といった表現がブログっぽい…」「WordPressのロゴが気になる…」「デフォルト仕様のWordPressが出力するソースが微妙…」など、カスタマイズした納品が望まれることもしばしば。
そこで、今回は「functions.phpを活用した管理画面の表示とデフォルトのWordPressが出力するソースに関するカスタマイズ」に絞ってご紹介していきます。