functions.phpの中でよく使うコード

HTMLサイトをWordPressにする本

wp_headで出力された不要なコードを省く

// WordPressバージョン情報出力非表示 ※セキュリティ対策のため削除推奨
remove_action('wp_head', 'wp_generator');

// 外部ツールがWordPressの情報を取得するリンク(RSD用のxmlへのリンク)の非表示 ※任意
remove_action('wp_head', 'rsd_link');

// Windows Live Writerのマニフェストファイルへのリンクの非表示 ※任意
remove_action('wp_head', 'wlwmanifest_link');

// 絵文字機能の削除 ※任意
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');

管理画面ログインページのロゴを変更

function my_login_logo(){
echo
'<style>
  body{background: #f8f8f8!important;}  /* ログイン画面背景色を指定 */
  body.login div#login h1 a {
    background: url('. get_stylesheet_directory_uri() .'/img/site-id-img.svg) no-repeat center;  /* 画像を指定 */
    background-size: contain;
    width: 100px;  /* 横幅を指定 */
    height: 100px;  /* 縦幅を指定 */
    margin-bottom: 0;
  }
</style>';
}
add_action('login_enqueue_scripts', 'my_login_logo');

アイキャッチ画像の設定領域を追加

function theme_setup(){
  add_theme_support('post-thumbnails');
  add_image_size('article-thumbnail', 250, 250, true);  // ※任意 自分が指定したサイズに切り出したい場合に名前、サイズを指定
}
add_action('after_setup_theme', 'theme_setup');

CSSの読み込み

※<?php wp_head(); ?>を記載している場所に出力

// CSS読み込み
function my_stylesheet(){
  // 共通のreset.cssを読み込む
  wp_enqueue_style('reset', get_stylesheet_directory_uri() .'/css/reset.css', array(), '1.0.0', false);  // faleseの場合、<head>の中に表示

  // style.cssを読み込む、array('reset')と指定してreset.cssより下に表示させる
  wp_enqueue_style('main-style', get_stylesheet_directory_uri() .'/style.css', array('reset'), '1.0.0', false);

  // 各ページで使用するCSSを条件分岐 ※不要なら削除
  if(is_page('company')):
    wp_enqueue_style('company', get_stylesheet_directory_uri() .'/css/company.css', array(), '', false);
  elseif(is_single() || is_category()):
    wp_enqueue_style('single', get_stylesheet_directory_uri() .'/css/single.css', array(), '', false);
  endif; 
}
add_action('wp_enqueue_scripts', 'my_stylesheet');

JavaScriptの読み込み

※<?php wp_head(); ?>を記載済みの状態で、<?php wp_footer(); ?>を記載している場所に出力

// JavaScript読み込み
function my_scripts(){
  wp_enqueue_script('jquery-min-js', 'https://code.jquery.com/jquery-3.6.4.min.js', array(), '3.6.4', true);  // trueの場合、</body>の前に表示
  wp_enqueue_script('main-script', get_stylesheet_directory_uri() .'/js/script.js', array('jquery-min-js'), '1.0.0', true);

  // 各ページで使用するJavaScriptを条件分岐 ※不要なら削除
  if(is_page('company')):
    wp_enqueue_script('company', get_stylesheet_directory_uri() .'/js/company.js', array('jquery-min-js'), '', true);
  elseif(is_single() || is_category()):
    wp_enqueue_script('single', get_stylesheet_directory_uri() .'/js/single.js', array('jquery-min-js'), '', true);
  endif;
}
add_action('wp_enqueue_scripts', 'my_scripts');

WordPressに登録されているjQuery読み込む

※WordPressに登録されているjQueryを読み込む場合、自作のjsに「$」を使用していれば「jQuery」に変更する必要があります。
例:$(‘#gnav’).toggleClass(‘is-open’); → jQuery(‘#gnav’).toggleClass(‘is-open’);

function my_scripts_method(){
  wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');

WordPressに登録されている jQuery を出力させない

function my_scripts_method(){
  wp_deregister_script('jquery');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');

管理画面で投稿の「タグ」をチェックボックスで選択できるように見た目を変更

function change_post_tag_to_checkbox(){
  $args = get_taxonomy('post_tag');
  $args -> hierarchical = true;  // Gutenberg用
  $args -> meta_box_cb = 'post_categories_meta_box';  // Classicエディター用
  register_taxonomy('post_tag', 'post', $args);
}
add_action('init', 'change_post_tag_to_checkbox', 1);

管理画面のメニューからコメントを非表示

//コメント非表示
function edit_admin_menus() {
  global $menu;
  remove_menu_page ( 'edit-comments.php' );
}
add_action( 'admin_menu', 'edit_admin_menus' );

管理画面の「投稿」の名前を変更

// 投稿の名前変更
function change_menu_label(){
  global $menu;
  global $submenu;
  $name = 'お知らせ';
  $menu[5][0] = $name;
  $submenu['edit.php'][5][0] = $name.'一覧';
  $submenu['edit.php'][10][0] = '新しい'.$name;
}
function change_object_label(){
  global $wp_post_types;
  $name = 'お知らせ';
  $labels = &$wp_post_types['post']->labels;
  $labels->name = $name;
  $labels->singular_name = $name;
  $labels->add_new = _x('追加', $name);
  $labels->add_new_item = $name.'の新規追加';
  $labels->edit_item = $name.'の編集';
  $labels->new_item = '新規'.$name;
  $labels->view_item = $name.'を表示';
  $labels->search_items = $name.'を検索';
  $labels->not_found = $name.'が見つかりませんでした';
  $labels->not_found_in_trash = 'ゴミ箱に'.$name.'は見つかりませんでした';
}
add_action('init', 'change_object_label');
add_action('admin_menu', 'change_menu_label');

管理画面のメニューの並び替え

function original_menu_order($menu_order){
  if(!$menu_order) return true;
  return array(
    'index.php',  // ダッシュボード
    'separator1',  // 区切り線
    'edit.php',  // 投稿
    'edit.php?post_type=en-news',  // カスタム投稿タイプ en-news
    'edit.php?post_type=works',  // カスタム投稿タイプ  works
    'edit.php?post_type=page',  // 固定ページ
    'upload.php',  // メディア
    'themes.php',  // 外観
    'plugins.php',  // プラグイン
    'users.php',  // ユーザー
    'tools.php',  // ツール
    'options-general.php',  // 設定
  );
}
add_filter('custom_menu_order', 'original_menu_order');
add_filter('menu_order', 'original_menu_order');

カスタム投稿タイプの追加

function create_post_type(){
  // カスタム投稿タイプ名 diary 追加
  register_post_type(
    'diary',  // カスタム投稿タイプ名 
    array(
      'labels' => array(  // 管理画面上の表示
        'name' => '日記',
        'singular_name' => '日記',
      ),
      'public' => true,  // 管理画面に表示するかどうかの指定
      'menu_position' => 5,  // メニュー位置の指定
      'has_archive' => true,  // 投稿した記事のアーカイブページを生成
      'show_in_rest' => true,  // Gutenbergエディターの有効化
      'supports' => array('title', 'editor', 'thumbnail', 'revisions', 'excerpt')  // 編集画面に表示させる項目の指定
    )
  );

  // カスタム投稿タイプ名 diary のカスタムタクソノミー追加
  register_taxonomy(
    'diary-cat',  // カスタムタクソノミー diary-catの名前
    'diary',  // カスタムタクソノミーを追加したいカスタム投稿タイプ名 diaryを記載
    array(
      'label' => 'カテゴリー',  // 管理画面表示名称
      'public' => true,  // 管理画面に表示するかどうかの指定
      'hierarchical' => true,  // 階層を持たせるかどうか ※タグの追加の場合は false
      'show_in_rest' => true,  // REST APIの有効化。ブロックエディタの有効化。
    )
  );

  // flush_rewrite_rules( false ); ※カスタム投稿タイプの記事が404エラーになった場合はこのコードを記述すると直ることがあります
}
add_action( 'init', 'create_post_type' );

カスタムメニューを追加

※出力の仕方はheader.phpfooter.phpを参照

// カスタムメニューを追加
function register_my_menus(){ 
  register_nav_menus(array(  // 複数のナビゲーションメニューを登録する時の関数
    // 「メニューの位置」の識別子 => メニューの説明の文字列,
    'main-menu' => 'Main Menu',  // グローバルナビゲーション用
    'footer-menu' => 'Footer Menu',  // フッターナビゲーション用
  ));
}
add_action('after_setup_theme', 'register_my_menus');

ウィジェット機能を追加

※出力の仕方はsidebar.phpfooter.phpを参照

// ウィジェット機能を追加
function my_widgets_init(){
  register_sidebar(array(
    'name' => 'News Widgets',  // News用のウィジェット名
    'id' => 'news-widgets',  // News用のウィジェットID名
    'before_widget' => '<div id="%1$s" class="widget">',  // ※必要なら追加 <ul>で出力されるソースコードを<div>に変更
    'after_widget' => '</div>',  // ※必要なら追加 </ul>で出力されるソースコードを</div>に変更
  ));
  
  register_sidebar(array(
    'name' => 'Footer Widgets',  // Footer用のウィジェット
    'id' => 'footer-widgets',  // Footer用のウィジェットID名
    'before_widget' => '<div id="%1$s" class="widget">',  // ※必要なら追加 <ul>で出力されるソースコードを<div>に変更
    'after_widget' => '</div>',  // ※必要なら追加 </ul>で出力されるソースコードを</div>に変更
  ));
}
add_action('widgets_init', 'my_widgets_init');

保護中のページのタイトルから「保護中:」を削除し、テキストを変更

//保護中のページのタイトルから「保護中:」を削除
add_filter('protected_title_format', 'remove_protected');
function remove_protected($title) {
       return '%s';
}

//保護中のテキストを変更
function my_password_form() {
  return
      '<p>パスワードを入力してください。</p>
      <form class="post-password" action="' . home_url() . '/wp-login.php?action=postpass" method="post"><input name="post_password" type="password" size="24" /><input type="submit" name="Submit" value="' . esc_attr__("パスワードを送信") . '" /></form>';
}
add_filter('the_password_form', 'my_password_form');

最低限覚えておきたい
WordPressのコード