テーマ作成時のfunctions.php超基本設定まとめ

テーマ作成時のfunctions.php超基本設定まとめ

テーマ作成時に、functions.phpに書くべき超基本部分のまとめです。
記事の最後に、私がベースにしているオリジナルfunctions.phpも掲載しています。
コンテンツ幅設定 / テーマ機能設定 / ウィジェット設定 / CSS&JS読み込み

コンテンツ幅

という事で、WP5ではコンテンツ幅設定の影響をレスポンシブイメージが受けなくなりました。
しかし、テーマチェックプラグインで必須となるため、念の為に設定しておきましょう。
参考記事 : コンテンツ幅の設定

利用する機能

テーマで使う機能を宣言し実装します。
参考記事 : テーマの基本設定を行い機能を実装します。
参考記事 : カスタムメニューのキホン 〜作り方と表示設定〜

ウィジェット

ウィジェットエリアの設定を工夫する事で、サイト管理を簡単にできるようになります。
参考記事 : ウィジェット機能を有効にし、複数のウィジェットエリアを定義します。

CSS&JS

CSS / JSファイルの管理をfunctions.phpで一元化する事で、メンテナンスが簡単になります。
参考記事 : functions.phpで外部CSSファイルをラクラク管理する方法
参考記事 : functions.phpで外部JSファイルをラクラク管理する方法

CSSの管理

JSの管理

CSS/JS出力のカスタマイズ

CSSのid属性・type属性やJSのtype属性だったり、シングルクォーテーションの使い方だったりと、ソースコードの美しさににこだわる方は整形しちゃいましょう。
参考記事 : functions.phpで追加したCSS/JSのlinkタグの属性を整形する

まとめ

普段使っているfunctions.phpのベースファイルの内容

<?php
/* ****************************************************************************
Content Width
Theme Support
Widget
CSS Loader
JS Loader
	Remove Version
	Tag Cleaning
**************************************************************************** */

/* ----------------------------------------------------------------------------
Content Width
---------------------------------------------------------------------------- */
function wpqw_content_width() {
	$GLOBALS['content_width'] = apply_filters( 'wpqw_content_width', 780 );
}
add_action( 'after_setup_theme', 'wpqw_content_width', 0 );

/* ----------------------------------------------------------------------------
Theme Support
---------------------------------------------------------------------------- */
if ( ! function_exists( 'wpqw_setup' ) ):
	function wpqw_setup() {
		add_theme_support( 'title-tag' );
		add_theme_support( 'automatic-feed-links' );
		add_theme_support( 'post-thumbnails' );
		add_theme_support( 'wp-block-styles' );
		add_theme_support( 'align-wide' );
		add_theme_support( 'editor-styles' );
		add_editor_style( 'css/editor.css' );
		add_theme_support( 'responsive-embeds' );
		register_nav_menus( array(
			'nav' => 'Navi',
		) );
		load_theme_textdomain( 'textdomain', get_template_directory() . '/language' );
	}
endif;
add_action( 'after_setup_theme', 'wpqw_setup' );

/* ----------------------------------------------------------------------------
/*	Widget
---------------------------------------------------------------------------- */
function wpqw_widgets_init() {
	register_sidebars( 2, array(
		'name'          => __( 'SIDEBAR', 'textdomain' ),
		'id'            => 'sidebar',
		'before_widget' => '<div id="%1$s" class="widget %2$s">',
		'after_widget'  => '</div>',
		'before_title'  => '<h3 class="widget-title">',
		'after_title'   => '</h3>',
	) );
}
add_action( 'widgets_init', 'wpqw_widgets_init' );

/* ----------------------------------------------------------------------------
CSS Loader
---------------------------------------------------------------------------- */
function wpqw_register_style() {
	wp_register_style( 'reset', get_template_directory_uri() . '/css/reset.min.css', array(), null, 'all' );
	wp_register_style( 'style', get_stylesheet_uri(), array(), null, 'all' );
	wp_register_style( 'comment', get_template_directory_uri() . '/css/comment.css', array(), null, 'all' );
	wp_register_style( 'awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', array(), null, 'all' );
}
function wpqw_add_stylesheet() {
	wpqw_register_style();

	/* shared */
	wp_enqueue_style( 'reset' );
	wp_enqueue_style( 'style' );
	wp_enqueue_style( 'awesome' );
	if ( is_singular() ) {
		wp_enqueue_style( 'comment' );
	}
}
add_action( 'wp_print_styles', 'wpqw_add_stylesheet' );

/* ----------------------------------------------------------------------------
JS Loader
---------------------------------------------------------------------------- */
if ( ! is_admin() ) {
	function wpqw_register_script() {
		wp_register_script( 'script', get_template_directory_uri() . '/js/script.js', array( 'jquery' ), false, true );
	}
	function wpqw_add_script() {
		wpqw_register_script();
		wp_enqueue_script( 'script' );
		if ( is_front_page() ) {
		} elseif ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
			wp_enqueue_script( 'comment-reply' );
		}
	}
	add_action( 'wp_print_scripts', 'wpqw_add_script' );
}

/* Remove Version
---------------------------------------------------------------------------- */
function wpqw_remove_cssjs_ver( $src ) {
	if( strpos( $src, '?ver=' ) )
		$src = remove_query_arg( 'ver', $src );
	return $src;
}
add_filter( 'style_loader_src', 'wpqw_remove_cssjs_ver' );
add_filter( 'script_loader_src', 'wpqw_remove_cssjs_ver' );

/* Tag Cleaning
---------------------------------------------------------------------------- */
function wpqw_cleaning_cssjs_tag( $tag ) {
	return preg_replace( array( "/'/", '/(id|type|media)=".+?" */', '/ \/>/' ), array( '"', '', '>' ), $tag );
}
add_filter( 'style_loader_tag', 'wpqw_cleaning_cssjs_tag' );
if ( !is_admin() ) {
	add_filter( 'script_loader_tag', 'wpqw_cleaning_cssjs_tag' );
}