ビジネス向けWEBサイトをつくる

知っておくと便利なfunctions.phpに記述するカスタマイズコード

本ページはプロモーションが含まれています

WordPressは「functions.php」にコードを追加するだけで、テーマに様々な機能を追加することができます。

あらゆることが可能なので、全部を網羅することは無理ですが、私が使って便利だった「ちょっとしたコード」を紹介します。

【PR】「Theme3」では、企業サイトのWordPressテーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「SOLARIS」の詳細をTCDのページで見る

レスポンシブ対応
カスタム投稿タイプ「お知らせ」「企業情報」「サービス」「プロジェクト」
高速化設定(絵文字読み込み・コード最適化)
他、機能多数。

ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。

タイトルに「NEW」を付ける関数

「functions.php」にはフックやフィルター意外にも通常の関数を書くことができます。

以下は、ニュースのタイトルに「NEW」マークを付ける関数です。

function new_mark(){
	$days = 14; //Newを表示させたい期間の日数
    $today = date_i18n('U');
    $entry_day = get_the_time('U');
    $keika = date('U',($today - $entry_day)) / 86400;
    if ( $days > $keika ):
        echo '<span class="newmark">NEW!</span>';
    endif;
}

以下のような感じで使うと良いでしょう。

<div id="whatsnew">			
	<?php		
	$news_posts = get_posts('post_type=news&posts_per_page=5');
	if ( !empty($news_posts) ): 
		foreach ( $news_posts as $post ):
			setup_postdata($post); ?>
			<hr/>
				<dl>
					<a href="<?php the_permalink(); ?>">
					<dt><?php echo get_the_date(); ?></dt>
					<dd><?php new_mark();?><?php the_title();?></dd></a>
				</dl>		
		<?php
		endforeach; // ループの終了
		wp_reset_postdata(); // 直前のクエリを復元する ?>
		<hr/>
	<?php
	else: ?>
		<hr/>
			<dl>
				<br/><div class=centering>記事がありません</div><br/>
			</dl>
		<hr/>
	<?php endif; ?>	
</div>	

【PR】「Theme3」では、企業サイトのWordPressテーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「SOLARIS」の詳細をTCDのページで見る

レスポンシブ対応
カスタム投稿タイプ「お知らせ」「企業情報」「サービス」「プロジェクト」
高速化設定(絵文字読み込み・コード最適化)
他、機能多数。

ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。

添付ファイルページを404に

WordPressでは、画像を登録すると添付ページができる機能が備わってます。

例えば「img」という名称の画像を登録すると「https://www.theme3.net/functions-sample/img-1280×790/」というページができます。

テーマによっては、このページがGoogleにキャッシュされたりします。

このような場合は「attachment.php」のアクセスを404にすれば、対策出来ます。

add_action( 'template_redirect', 'status404' );

function status404() {
  // attachmentページだった場合
  if ( is_attachment() ) {
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
  }
}

【PR】「Theme3」では、企業サイトのWordPressテーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「SOLARIS」の詳細をTCDのページで見る

レスポンシブ対応
カスタム投稿タイプ「お知らせ」「企業情報」「サービス」「プロジェクト」
高速化設定(絵文字読み込み・コード最適化)
他、機能多数。

ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。

管理画面の「投稿」を「コラム」に変更する

WordPressでブログ記事を書く場合は「投稿」でいいのですが、企業サイト等は「コラム」としたほうが、しっくりくる場合があります。

以下のコードで「投稿」を「コラム」に変更できます。

//
/* 「投稿」を「コラム」に変更
---------------------------------------------------------- */
function change_post_menu_label() {
 global $menu;
 global $submenu;
 $menu[5][0] = 'コラム';
 $submenu['edit.php'][5][0] = 'コラム一覧';
 $submenu['edit.php'][10][0] = '新規追加';
 $submenu['edit.php'][16][0] = 'タグ';
}
function change_post_object_label() {
 global $wp_post_types;
 $labels = &$wp_post_types['post']->labels;
 $labels->name = 'コラム';
 $labels->singular_name = 'コラム';
 $labels->add_new = _x('追加', 'コラム');
 $labels->add_new_item = 'コラムの新規追加';
 $labels->edit_item = 'コラムの編集';
 $labels->new_item = 'コラム情報';
 $labels->view_item = 'コラムを表示';
 $labels->search_items = 'コラムを検索';
 $labels->not_found = '記事が見つかりませんでした';
 $labels->not_found_in_trash = 'ゴミ箱に記事は見つかりませんでした';
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );

tagを管理用のコードとして使うために一覧で非表示にする

「tag」はタグクラウドのように、キーワードとして使用すると便利です。

それ以外にも特別な投稿を作成し管理するような場合、例えば管理用のタグを指定された記事のみをサイドバーに一覧表示したりする場合、投稿された一覧に表示させないようにできます。

//
/* 管理用タグを非表示 exは2つ目のスライダー
---------------------------------------------------------- *///
function remove_admin_tags($tags,$tax=null,$args=null){
	if(!is_admin()){
		foreach($tags as $idx=>$tag){
			if($tag->name=='ad' || $tag->name=='th'){
				unset($tags[$idx]);
			}
		}
	}
	return($tags);
}
add_filter('get_terms','remove_admin_tags',10,3);
add_filter('get_the_terms','remove_admin_tags',10,3);

上記の場合タグ「ad」と「th」はタグ一覧に表示されません。

アーカイブページの表示数を指定する

投稿ページのアーカイブは「管理画面→表示設定→1ページに表示する最大投稿数」で1ページに表示できるページを決められます。

functions.phpを使っても表示個数を変更出来ます。

以下はカスタム投稿のアーカイブページの個数を決定しています。

//カスタム投稿「works」の表示数
function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;
    
    if ( $query->is_post_type_archive('works') ) { //カスタム投稿タイプを指定
	    if ( wp_is_mobile() ) :
        	$query->set( 'posts_per_page', '10' ); //表示件数を指定
        else:
        	$query->set( 'posts_per_page', '9' ); //表示件数を指定
		endif;
    }
    
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

スマホとPCで表示数を変更したりも可能です。

カスタム投稿アーカイブの表示順を決定する

カスタム投稿のアーカイブページで表示順を変更することができます。

//
/* カスタム投稿アーカイブページの順序を日付順にする
---------------------------------------------------------- */	
add_filter( 
  'pre_get_posts',
  function( $query ) {
    if ( is_admin() ) {
      // 「custom_post_type」は適宜カスタム投稿タイプスラッグに変更してください.
      if ( isset($query->query['post_type']) && 'news' === $query->query['post_type'] ) {
        $query->set( 'orderby', 'date' );
        $query->set( 'order', 'DESC' );
      }
    }
  }
);

「DESC」を「ASC」に変更すると並び順が逆になります。

メンテナンスモードにする

プラグインを使用しなくてもfunctions.phpでメンテナンスモードを表示できます。

//
/* メンテナンスモード
---------------------------------------------------------- */	
function maintenance_mode() {
if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
wp_die('ただいまメンテナンス中です。');
}
}

固定ページでGUTENBERG(ブロックエディタ)を無効化する

固定ページを管理用にしていた場合など、GUTENBERG(ブロックエディタ)の機能が不都合な場合があります。

そのような際にはブロックエディタを固定ページだけ無効化してしまいましょう。

//固定ページでGUTENBERG(ブロックエディタ)を無効化
add_filter( 'use_block_editor_for_post_type', 'hide_block_editor', 10, 10 );
function hide_block_editor( $use_block_editor, $post_type ) {
if ( $post_type === 'page' ) return false;
return $use_block_editor;
}

contact form7の外国からのスパム対策

contact form7はWordPressでよく使われるお問い合わせフォームプラグインです。

海外からのスパムメールが入るような場合には、日本語がないとエラーにしてしまうよう対策しましょう。

//メールフォームの textarea にひらがなが無ければ送信できない
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);

function wpcf7_validation_textarea_hiragana($result, $tag)
{
    $name = $tag['name'];
    $value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';

    if ($value !== '' && !preg_match('/[ぁ-ん]/u', $value)) {
        $result['valid'] = false;
        $result['reason'] = array($name => 'エラー / この内容は送信できません。(Japanese Only)');
    }

    return $result;
}

まとめ

私の手掛けた1サイトから、便利そうな「functions.php」のコードを抽出してみました。

他のサイトも合わせれば膨大な数のコードをピックアップできると思います。

今後、「これは!」と思うものがあれば、追加していきたいです。

【PR】「Theme3」では、企業サイトのWordPressテーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「SOLARIS」の詳細をTCDのページで見る

レスポンシブ対応
カスタム投稿タイプ「お知らせ」「企業情報」「サービス」「プロジェクト」
高速化設定(絵文字読み込み・コード最適化)
他、機能多数。

ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。

プロモーション

戦略的WEBサイト構築方法

戦略的WEBサイト構築方法
WEB担当者にオススメ

WEBサイトをビジネス戦略のPDCAサイクルに組み込むための考え方と、サイトを内製化する方法を分かりやすく解説します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

5 × two =

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
lin記事を書いている人
はじめまして。「lin」です。クリエイティブディレクター兼グラフィックデザイナーとして活動しています。おかげさまで、キャリア25年以上になりました。「Theme3」は、私が企画デザイン事務所スラッシュディーの仕事で得たノウハウを公開します。
※以下は私が活動している企業情報にリンクしています。