【WordPress】便利な独自カスタマイズ

WordPressで役にたつオリジナルカスタマイズを掲載します。

# 効率化
## キャッシュ対策として自動的にパラメータを付与する方法

```functions.php
<?php
// キャッシュ対策としてファイルの更新時にパラメータを自動付与
function get_filepath_cache($filePath) {
  // 該当ファイルの更新日時を取得
  $fileUpdateTime = filemtime(get_template_directory() . $filePath);
  // ファイル名の最後尾にパラメータとして付与
  $addedParametersPath = get_template_directory_uri() . $filePath . '?'. $fileUpdateTime;
  return $addedParametersPath;
}
```
```header.php
<link rel="stylesheet" href="<?php echo get_filepath_cache('/css/style.css') ?>">
<link rel="stylesheet" href="<?php echo get_filepath_cache('/css/page.css') ?>">
```

結果、該当のファイルが更新されるたびにパラメータ部分が更新され、
以下のような形で出力される。
```sample.html
<link rel="stylesheet" href="https://sample.com/wp-content/themes/sample/css/style.css?1662019869">
<link rel="stylesheet" href="https://sample.com/wp-content/themes/sample/css/page.css?1662019870">
```
# デバッグ
## ローカル環境でのみデバッグCSSを機能させる
gulpなどを使って構築しているときだけdebug.cssを読み込む設定。
デバッグさせる方法としてphpでローカル環境か、それ以外かを特定して分岐処理を実施。
基本的には、ローカル環境以外では該当箇所を削除するルールが好ましいが、
もしも、、誤ってそのまま本番環境へアップしてしまってもユーザーには見られない。
```header.php
<!-- debug -->
<?php
    $hostName = $_SERVER['HTTP_HOST'];
    $InitialhostName = substr($hostName, 0, 9);
    if ($InitialhostName === 'localhost'){
        // ↓↓ debug.cssの格納場所はお好みで ↓↓
        echo '<link rel="stylesheet" type="text/css" href="',get_template_directory_uri(),'/debug.css">';
    }
?>
<!-- debug -->
```
「debug.css」と検索すれば色々なものが出てくるのでお好みで利用してみてはいかがでしょうか。
altが入っていないとか、time要素にdatetime属性がないとか、検知してるものもたくさんあります。

# 高速化
## 絵文字系の設定(wpemojiSettings)を削除する方法 
基本的に制作対象のウェブサイトに絵文字を利用する要件はないはずなので
よほどのことがなければ削除推奨。
```functions.php
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles', 10 );
```
Gutenbergの読み込みスタイル（wp-block-library-css）を削除（利用しない場合）
```functions.php
function dequeue_plugins_style() {
    wp_dequeue_style('wp-block-library');
}
add_action( 'wp_enqueue_scripts', 'dequeue_plugins_style', 9999);

function mytheme_enqueue() {
    wp_dequeue_style( 'wp-block-library' );
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue' );
```


# セキュリティ対策
## ワードプレスのバージョン情報を表示させない
なにもしないと、以下のような不要な情報が出力されてしまう。
```html
<meta name="generator" content="WordPress X.X.X" />
```
以下のように追記することで出力させないようにできる。
```functions.php
//WordPressのバージョン情報を削除
remove_action('wp_head', 'wp_generator');
```

## wlwmanifest.xmlの非表示
Microsoft製ブログ編集ツールで利用するらしい。
ただ、不正アクセスで利用されているとのこと！非公開設定推奨！

以下のような出力されている部分を非表示にします。
```html
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://sample.com/wp-includes/wlwmanifest.xml" />
```
以下のように追記して非表示にしましょう。
```functions.php
remove_action( 'wp_head', 'wlwmanifest_link' );
```

## XML-RPC情報の非表示
xmlrpc.phpは外部からの遠隔操作を担うという性質上、ハッカーに狙われる可能性が高いファイルの１つ
とのことで、こちらも非表示化が推奨かと思われます。
```sample.html
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://XXXXXX/xmlrpc.php?rsd" />
```
以下のように追記して非表示にします。
```functions.php
remove_action ('wp_head', 'rsd_link');
```

## RSSフィードを停止・非表示
```functions.php
// RSSフィード配信を停止
remove_action('do_feed_rdf', 'do_feed_rdf');
remove_action('do_feed_rss', 'do_feed_rss');
remove_action('do_feed_rss2', 'do_feed_rss2');
remove_action('do_feed_atom', 'do_feed_atom');
 
// RSSフィードリンクを除去
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
```

# その他よく使う項目
## 404エラーの時トップページに自動リダイレクト
```functions.php
// 404エラーの時にトップページに自動的にリダイレクト
add_action( 'template_redirect', 'is404_redirect' );
function is404_redirect() {
  if ( is_404() ) {
    wp_safe_redirect( home_url( '/' ), 301 );
    exit();
  }
}
```

## coming soon
他、随時更新


## 参考
https://velleity-note.blog/wordpress/unnecessary-tags/

https://cofus.blog/posts/wordpress-cleanup