自作ツール&スクリプト

【WordPress】プラグイン無しでWordPress機能拡張ができる!「functions.php」のおすすめコードまとめ

wordpress-functions-php

すいみん
こちらのCGメソッドの記事では「functions.php」のおすすめコードまとめを紹介します!「functions.php」に記述することで、プラグインを入れることなくWordPressの機能拡張ができます!

タップできるもくじ

「functions.php」とは?

ざっくり言うと見た目の追加・調整は「CSS」を記述するかと思いますが、機能の追加・調整はfunctions.phpで記述します。
この「functions.php」をPHPの記述で編集することで、プラグインを使わずにWordPressをカスタマイズできます!

  • 自作ショートコードの作成
  • すべての記事に挿入した記述
  • 記事投稿画面のカスタマイズ(新しい項目の追加)
  • 自作ウィジェットの追加

などなど。



「functions.php」を編集するための環境構築

通常の「functions.php」を編集する方法

「外観」>「テーマの編集」>「テーマのための関数(functions.php)」に記述します。
ただし、記述内容によってはWordPressが真っ白に表示されてしまうリスクがあるので、「Code Snippets」というプラグインから書くことをおすすめします。

「Code Snippets」の導入方法

簡単です。プラグインメニューから「Code Snippets」で検索してインストール&有効化
プラグインをいれるとダッシュボードのプラグインメニューの項目の下に「Snippets」というメニューが表示されます。

「Code Snippets」の使い方

詳しい使い方は下記のサイトを参照ください
参考 Code Snippets – functions.phpのPHPコードを管理できるWordPressプラグイン | ネタワンネタワン

PHPの挿入方法

そのままコードを入力するだけでOKです。
たとえば

function paka3_addtext($contentData) {
    $str = $contentData."テスト!";
    return $str;
}
add_filter('the_content','paka3_addtext');

と記入すると全ての記事の一番したに「テスト!」の文字が表示されます。

HTMLの挿入方法

HTMLも追加できます。

add_shortcode( 'shortcode_name', function () { ?>

    <p>write your HTML shortcode content here</p>

<?php } );

CSSの挿入方法

そしてCSSも追加できます。

add_action( 'wp_head', function () { ?>
    <style>

        /* write your CSS code here */

    </style>
<?php } );

JavaScriptの挿入方法

同じくJavaScriptも追加できます。

add_action( 'wp_head', function () { ?>
    <script>

        /* write your JavaScript code here */

    </script>
<?php } );


おすすめの「functions.php」

[セキュリティ]ログインID表示を隠す

WordPressで「サイトURL/?author=1」と検索すると自分のログインIDがバレてしまうので。
トップページヘリダイレクト(転送)をかけています。

add_filter( 'author_rewrite_rules', '__return_empty_array' );
function no_author(){
    if($_GET['author'] || strpos($_SERVER['REQUEST_URI'], '/author/') !== false){
       wp_safe_redirect(home_url());
       exit;
    }
}
add_action('init', 'no_author');

[機能拡張]ウィジェット内でもショートコードを使用可能に

ウィジェット内でショートコードを使用できるようにします。
記事下のウィジェットでフキダシなど装飾したかったので機能拡張。

add_filter('widget_text', 'do_shortcode' );

[シェア]「この記事のタイトルとURLをコピーする」ボタンの設置

記事のシェアがされやすくなります。
参考 ワンクリックで記事のURLをコピーするボタンを設置する方法 | 海月生活海月生活

[目次]自動で目次へ戻るリンクを挿入

各見出しの最後に「目次へ戻るリンク」を挿入しています。

※個人用に以前配布されていた(下記URL)を「Easy Table of Contents」用に改造してます。

参考 Table of Contents plusの目次に戻るボタンを見出し毎に自動挿入するプラグイン「TOC Extension – Back To Index」 | AccelivAcceliv

[パンくず]カテゴリーのパンくずリストで、現在のカテゴリーも含める

現在のカテゴリーも表示してパンくずの階層がわかりやすくなります。

参考 https://saruwakakun.com/sango/comments?id=5889サルワカ

[SEO]meta descriptionの追加

いままでメタディスクリプションタグを書いてなかったので、本文の一部から自動作成して挿入しています。
※本当はちゃんと入力するべきです!

参考 【WordPress】meta descriptionタグを本文の一部から自動作成BLOG AND DESTROY

[SEO]meta keywordの追加

メタキーワード効果がほとんど無いそうなのですが、一応トップページにはいれています。
参考 SANGOでメタキーワードを設定できるようにしたいサルワカ

[SEO]meta thumbnailの追加

Googleに向けてmetaタグを使ってアイキャッチ画像をサムネイルに指定するメタサムネイルタグをヘッダーに記述します。
参考 ワードプレスのSEO対策に!Google検索結果にサムネイルをさせる方法 | Let's Hack TechLet's Hack Tech

[SEO]canonicalタグの追加

Googleに評価されるページのURLを伝えます。重複記事対策。
参考 カテゴリー重複について | WordPressテーマSANGOサルワカ

[SEO]タグ一覧をnoindex

今の所カテゴリーとタグが重複しそうなので、noindexに。

「タグ一覧ページのmeta robotsをindexにしたい」の項目
参考 WordPressテーマ SANGOについてのよくある質問 | SANGOカスタマイズガイドSANGOカスタマイズガイド

[ダウンロード]特定の種類のデータのアップロード許可

本サイトでは「.JSX」というPhotoshopやAfterEffectsで使うスクリプトをアップロード&ダウンロードできるようにしています。

add_filter('upload_mimes', 'allow_upload_other');
function allow_upload_other($mimes){
  $mimes['jsx'] = 'text/plain';
  return $mimes;
}
【WordPress】ブログを始めるなら入れておきたい!おすすめのプラグインまとめ

※拡張子セキュリティ許可として「Disable Real MIME Check」のプラグインも場合によっては必要です。

[デザイン調整]固定ページの自動整形OFF

固定ページをTOPページに使っているのですが、自動整形機能がデザインを崩すことがあるのでそのページに対して自動整形機能をOFFにしています。
参考 WordPressで自動挿入されるタグ<p>や<br>を除去する方法 - UPDATEUPDATE

[Rinker]クレジット削除&文言変更

Rinkerクレジット削除&文言を変更しています(※有料記事です)
※ちなみにCSSでも似たようなことは可能です。
参考 Rinkerへのご支援とカスタマイズ方法の表示やよい

[サイトマップ]タグ一覧ページの作成

カテゴリー一覧のページの記述を少し変えて(functions.php)、タグ一覧ページを作成しています。
参考 SANGOカスタマイズ – フッターにタグを追加し、登録しているタグを一覧表示させる方法 | 日曜、午後、六時半。日曜、午後、六時半。

[ウィジェット管理]ウィジェットのタイトルを非表示

下記の記事のPHPコードいれて、ウィジェットタイトルの頭に「!」をつけるとウィジェットのタイトルを非表示にできます。
ウィジェットタイトルで何のウィジェットわかるので管理しやすくなります!

add_filter( 'widget_title', 'remove_widget_title' );
function remove_widget_title( $widget_title ) {
  if ( substr ( $widget_title, 0, 1 ) == '!' )
    return;
  else 
    return ( $widget_title );
} 
参考 WordPress ウィジェットのタイトルを非表示にする方法【プラグイン不要】Webllica -ウェブリカ-

[CTA]記事をショートコード化して挿入する

みたいな感じで記事IDを入力してショートコード挿入すれば記事内に固定記事を挿入できます。
CTAなど固定記事から作成できるので便利。

<?php
function shortcode_insert($atts){
extract(shortcode_atts(array('id'=>0),$atts));
if(get_post($id)!=null)return wpautop(do_shortcode(get_post($id)->post_content));
}
add_shortcode('insert','shortcode_insert');
?>
参考 WordPress ショートコードで自サイトの他の記事をそのまま挿入まっしろブログ

[ウィジェット]ウィジェットエリアの追加

モバイルとPC両方表示できるウィジェットエリアを追加しました。
【WordPress】新しくウィジェットエリアを追加する方法


(以前使っていた)おすすめの「functions.php」

ブログ表示の幅を広げるためにいろいろ試したものの記録です。

[内部リンク]特定カテゴリーの記事リストを表示

「showcatposts」のショートコードで「特定のカテゴリーURLをリスト表示」を作成します。

【WordPress】記事中に特定カテゴリーの全記事リストを表示する方法

[カテゴリー]サイドバーのカテゴリーから特定のカテゴリーを非表示にする

カテゴリー項目が多くなりすぎたので、一部非表示にして整理してました。

function exclude_widget_categories( $args){
    $exclude = '1,23';          // Exclude Category ID
    $args['exclude'] = $exclude;
    return $args;
}
add_filter( 'widget_categories_args', 'exclude_widget_categories');
【WordPress】サイドバーのカテゴリーから特定のカテゴリーを非表示にする方法

[アイキャッチ]記事の1画像目を非表示

はてなブログ時代に1画像目にアイキャッチ画像をアップロードして、それをアイキャッチ指定して使ってました。
WordPressではそんなことをしなくてもアイキャッチ画像を表示できるので切り替え検証用に使いました。

function remove_first_image ($content) {
if (!is_page() && !is_feed() && !is_home()){
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
} return $content;
}
add_filter('the_content', 'remove_first_image');
【WordPress】アイキャッチを暗くしてテキストをのせるバイラル風に表示する方法

[機能拡張]テンプレートのカラムを追加する

記事一覧で「テンプレート」など新しく項目を追加します。検索ソート用。
【WordPress】アイキャッチを暗くしてテキストをのせるバイラル風に表示する方法

[SEO]レビューの構造化データ

記事内でつけた星が検索結果にも表示されます。
レビュー記事書いてないので、今はOFFにしてます。
参考 プラグインなしでGoogleの検索結果に星を表示する方法【コピペ】 – Fantastech(ファンタステック)Fantastech(ファンタステック)

[機能拡張]タグの階層化して登録できるように

タグもカテゴリーと同じ用に階層化して登録したい時に使います。

[ウィジェット]タグのウィジェット化

上記項目の階層化に対応したタグ表示ウィジェットです。

[ウィジェット]ウィジェットエリアの追加

例えば記事下に新しいウィジェットエリアを追加してみます。

register_sidebar( array(
'id' => 'article_bottom_widget',
'name' => '記事下広告',
'description' => '説明文',
'before_widget' => '<div class="custom_sc1">',
'after_widget' => '</div>',
) );

差し込みたい場所のテンプレートにも「parts/single/entry-footer.php」記述を足します。

<?php if ( is_active_sidebar('article_bottom_widget') ) : ?>
<?php dynamic_sidebar('article_bottom_widget'); ?>
<?php endif; ?>


【WordPress】プラグインの数を減らす!おすすめの「functions.php」まとめ

「functions.php」の存在を知ってから、ブログカスタマイズにハマりました。
まだ全然大したことができないのですが、ユーザービリティをアップするものがいつか作れたらと思います。
現在プラグインを30個ほど入れてますが、これ以上いれたくないので「functions.php」が更に活躍しそうです。

プラグインのおすすめは下記の記事をご参照ください
【WordPress】ブログを始めるなら入れておきたい!おすすめのプラグインまとめ


以上、すいみん(@cg_method)でした!