WordPressのfunctions.phpに書いておくと捗ること

TwitterFacebookHatena
  • 公開:2017-12-11
  • 更新:2023-10-26
  • 文章量:6554
  • WordPress

TL;DR

WordPress の functions.php に書いておくと捗ることをまとめておきます。

固定ページ判別。body に固定ページのスラッグ名を追加

body に固定ページのスラッグ名を追加。トップページは home のクラス名がつく。固定ページなどは guide about などのスラッグ名を取得しクラス名が付与される。

function pagename_class($classes = ''){
  if (is_page()) {
    $page = get_post();//get_page()は廃止されたので使わない
    $classes[] = $page->post_name;//スラッグ名取得
  }
  return $classes;
}
add_filter('body_class', 'pagename_class');

呼び出し

<body <?php body_class( $class ); ?>>

テンプレートタグ/body class - WordPress Codex 日本語版

WordPress の body_class()にページスラッグの決定版 | terabenote.net

ブラウザ判別。body にブラウザ名付与

これをつけておくと、ブラウザごとにスタイル等を制御できるので便利。

add_filter('body_class','browser_body_class');
function browser_body_class($classes) {
    global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;

    if($is_lynx) $classes[] = 'lynx';
    elseif($is_gecko) $classes[] = 'gecko';
    elseif($is_opera) $classes[] = 'opera';
    elseif($is_NS4) $classes[] = 'ns4';
    elseif($is_safari) $classes[] = 'safari';
    elseif($is_chrome) $classes[] = 'chrome';
    elseif($is_IE) $classes[] = 'ie';
    else $classes[] = 'unknown';

    if($is_iphone) $classes[] = 'iphone';
    return $classes;
}

Browser Detection and the body_class() Function

アップロードした画像を特定のサイズにリサイズする

add_theme_support('post-thumbnails');
add_image_size( 'trimming_600_400', 600, 400, true );

呼び出し

<?php the_post_thumbnail('trimming_600_400'); ?>

admin バー 非表示

add_filter('show_admin_bar', '__return_false');

ページタイトルを自動出力

WordPress4.1 でタイトルタグが追加されましたが、以下のタグを functions.php に記述すると、現在非推奨の wp_title 関数を使わずにタイトルを出力することができます。

add_theme_support( 'title-tag' );

セパレーターなど細かなカスタマイズ方法は以下に詳しく書かれてます。

WordPress4.4 以降で title タグをカスタマイズする方法 | Glatch(グラッチ) – 夫婦で活動するフリーランス Web 制作ユニット

JavaScript をフッターに移動

JavaScript は基本的に head で読み込まず、できるだけ body の下部で読み込むようにしたいので、function.php に以下のように記載。そうすると後から JavaScript の処理をさせるので体感的にユーザーが遅く感じにくくなります。パラメーターを true にすることで wp_footer()で読み込まれます。true で body 終了タグの前、false で head 前。

// trueでbody終了タグの前、falseでhead前
function register_jquery(){
wp_enqueue_script(
'common-js',
get_template_directory_uri() . '/js/common.js',
array(),
NULL,
true
);
wp_enqueue_script( 'common-js' );
}
add_action('wp_enqueue_scripts', 'register_jquery');

ウィジェット登録

register_sidebar(array(
  'name'         => __('widget1'),
  'id'           => 'widget1',
  'before_widget'=> '',
  'after_widget' => '',
  'before_title' => '',
  'after_title'  => '',
));

呼び出し

<?php dynamic_sidebar('widget1' ); ?>

プラグイン・WordPress 自動更新

//プラグインの自動更新を有効化
add_filter( 'auto_update_plugin', '__return_true' );
//テーマの自動更新を有効化
add_filter( 'auto_update_theme', '__return_true' );
//メジャーアップグレードの自動更新を有効化
add_filter( 'allow_major_auto_core_updates', '__return_true' );
//マイナーアップグレードの自動更新を有効化
add_filter( 'allow_minor_auto_core_updates', '__return_true' );

不要な読み込みを減らして軽くする

WordPress バージョン情報を記載しておく理由などないし、Windows 用の WordPress ツールも使わないので削除しておきます。

// WordPressのバージョン情報は削除したほうがいい
remove_action('wp_head', 'wp_generator');
// ブログ投稿ツール用
remove_action('wp_head', 'rsd_link');
// Windows Live Writerは使わないので削除
remove_action('wp_head', 'wlwmanifest_link');
// Embed WPのブログカード。他サイトのアイキャッチ画像や抜粋自動埋め込み
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
// 管理画面絵文字削除
function disable_emoji()
{
    remove_action('wp_head', 'print_emoji_detection_script', 7);
    remove_action('admin_print_scripts', 'print_emoji_detection_script');
    remove_action('wp_print_styles', 'print_emoji_styles');
    remove_action('admin_print_styles', 'print_emoji_styles');
    remove_filter('the_content_feed', 'wp_staticize_emoji');
    remove_filter('comment_text_rss', 'wp_staticize_emoji');
    remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
}
add_action('init', 'disable_emoji');

概要(抜粋)の文字数調整

function my_excerpt_length($length) {
    return 80;
}
add_filter('excerpt_length', 'my_excerpt_length');

文末の[…]を削除し、...にする

function my_excerpt_more($more) {
    return '...';
}
add_filter('excerpt_more', 'my_excerpt_more');

コメント欄のメール削除し、コールバック関数を追加

// コメント ウェブサイトの入力欄を消す
add_filter('comment_form_default_fields', 'mytheme_remove_url');
function mytheme_remove_url($arg) {
$arg['url'] = '';
return $arg;
}

// コメント フォーム内のURLオートリンクを停止する
remove_filter('comment_text', 'make_clickable');

// コメント カスタマイズ コールバック関数
function mytheme_comment($comment, $args, $depth) {
    if ( 'div' === $args['style'] ) {
        $tag       = 'div';
        $add_below = 'comment';
    } else {
        $tag       = 'li';
        $add_below = 'div-comment';
    }
    ?>
    <<?php echo $tag ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> id="comment-<?php comment_ID() ?>">
    <?php if ( 'div' != $args['style'] ) : ?>
        <div id="div-comment-<?php comment_ID() ?>" class="comment-body">
    <?php endif; ?>

        <!-- 日付 -->
        <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>">
            <?php
            /* translators: 1: date, 2: time */
            printf( __('%1$s at %2$s'), get_comment_date(),  get_comment_time() ); ?></a><?php edit_comment_link( __( '(Edit)' ), '  ', '' );
            ?>
        </div>

        <!-- アバター -->
        <div class="flex">
            <div class="comment-author vcard">
                <?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, $args['avatar_size'] ); ?>
            </div>
            <?php if ( $comment->comment_approved == '0' ) : ?>
                <em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em>
                <br />
            <?php endif; ?>
            <!-- 内容 -->
            <div class="comment-content">
                <?php printf( __( '<cite class="fn">%s</cite>' ), get_comment_author_link() ); ?>
                <?php comment_text(); ?>
            </div>
        </div>

        <!-- 返信ボタン -->
    <div class="reply">
        <?php comment_reply_link( array_merge( $args, array( 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
    </div>
    <?php if ( 'div' != $args['style'] ) : ?>
    </div>
    <?php endif; ?>
    <?php
    }

参考:WordPress コメント入力欄をカスタマイズしてウェブサイト(URL)やメールアドレスを簡単に消す方法 | debate

以上、functions.php に書いておきたいことでした。

WordPressのfunctions.phpに書いておくと捗ること