Amazon Music 3か月無料で音楽聴き放題!

【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」の使い方

詳しい使い方は下記のサイトを参照ください

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)を「Easy Table of Contents」用に改造してます。

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

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

[SEO]meta descriptionの追加

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

[SEO]meta keywordの追加

メタキーワード効果がほとんど無いそうなのですが、一応トップページにはいれています。

[SEO]meta thumbnailの追加

Googleに向けてmetaタグを使ってアイキャッチ画像をサムネイルに指定するメタサムネイルタグをヘッダーに記述します。

[SEO]canonicalタグの追加

Googleに評価されるページのURLを伝えます。重複記事対策。

[SEO]タグ一覧をnoindex

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

「タグ一覧ページのmeta robotsをindexにしたい」の項目

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

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

add_filter('upload_mimes', 'allow_upload_other');
function allow_upload_other($mimes){
  $mimes['jsx'] = 'text/plain';
  return $mimes;
}

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

[改行]複数行改行できるショートコード

function lineBreak() {
    return '<br />';
}
add_shortcode( 'br', 'lineBreak' );

[br]と入力するとその行を改行できます(複数可)

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

固定ページをTOPページに使っているのですが、自動整形機能がデザインを崩すことがあるのでそのページに対して自動整形機能をOFFにしています。

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

Rinkerクレジット削除&文言を変更しています(※有料記事です)
※ちなみにCSSでも似たようなことは可能です。

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

カテゴリー一覧のページの記述を少し変えて(functions.php)、タグ一覧ページを作成しています。

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

下記の記事の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 );
} 

[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');
?>

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

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

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

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

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

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

function exclude_widget_categories( $args){
    $exclude = '1,23';          // カテゴリーID
    $args['exclude'] = $exclude;
    return $args;
}
add_filter( 'widget_categories_args', 'exclude_widget_categories');

[アイキャッチ]記事の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');

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

記事一覧で「テンプレート」など新しく項目を追加します。検索ソート用。

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

記事内でつけた星が検索結果にも表示されます。
レビュー記事書いてないので、今はOFFにしてます。

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

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

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

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

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

SANGOではウィジェットエリア「記事コンテンツ後広告」が「モバイル」と「PC」で別れていてとても親切なのですが、同じウィジェットを入れたい時は2倍の手間がかかるので、新たに「記事コンテンツ後広告(共通)」を追加してみました。

新しいウィジェットエリアの定義を追加

下記のコードをfunctions.phpに差し込みます。
できれば「Code Snippets」のプラグインを介して記述しましょう。

register_sidebar( array(
'id' => 'article_content_bottom_widget',
'name' => '記事コンテンツ後広告(共通)',
'description' => '説明文',
'before_widget' => '<div class="custom_sc">',
'after_widget' => '</div>',
) );

以上で外観>ウィジェットに「記事コンテンツ後広告(共通)」が追加されます。

FTPでのコピーが手間なのですが、一度子テーマに入れてしまえばいつでもカスタマイズ可能ですね!

「entry-content.php」のカスタマイズ

  1. FTPでWordPressのデータにアクセスして親テーマの「entry-content.php」(記事本体)のテンプレートをダウンロードしましょう。
    /wp-content/themes/sango-theme/parts/single/entry-content.php
    
  2. テキストエディタで「entry-content.php」を開き一番下に下記のコードを追加します。
    // 記事下広告(共通)
    if( is_active_sidebar('article_content_bottom_widget') && $show_ads ) {
       dynamic_sidebar('article_content_bottom_widget');
    }
    

  3. 編集が終わったら、子テーマの「/parts/single」の中に「entry-content.php」を格納しましょう。

    /wp-content/themes/sango-theme-poripu/parts/single
    
  4. 最後に「記事コンテンツ後広告(共通)」にウィジェットを入れてPCとモバイル両方に表示されるか確認しましょう

    外観>ウィジェットへ。 左上に「記事コンテンツ後広告(共通)」が追加されています。

もし記事を表示してサイトに重大なエラーがありました。と出てしまったら。
落ち着いて、FTPから子テーマにある「entry-content.php」を削除しましょう。
記事が再び親テーマから読み込まれて、表示されるはずです
その後、落ち着いてコードがミスしていないか?見直すとよいです。

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

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

プラグインのおすすめは下記の記事をご参照ください

関連記事