Wordpressページの特定の箇所だけを任意で変更できるようにする。



#はじめに

WordPressサイトをなんのために作るか。
だいたいの場合その答えは「パソコンの分からない人が楽に管理できるウェブサイトをつくる」に集約される。言い換えれば、クライアントが電話で「ここ分からないんですけど……」と聞いてくるようなサイトなら、それは存在する意味がないのだ。
だからこそ、作り手には「見つけやすい、迷いにくい、操作しやすい」設定ページを作ることが求められる。と思う。筆者は。

……とはいえ、初心者にとっては設定ページを作ることさえ簡単ではないというのも事実。
ここではタイトルの通り**ウェブサイトの特定の箇所を素人でも簡単に変更できるシステムの作り方**について説明するので、「これウチで使えそう！」と思ったら使ってみて欲しい。

#やること

![1575469743669.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/0c112fc4-59b4-d2af-7e4e-f921afd3774a.jpeg)

##STEP１：その部分を操作するための固定ページをつくる

いつも通り、左メニューの「固定ページ」→「新規追加」から編集画面に入り、右側にある「公開」ボタンを押して専用の固定ページを作ってやればよい。
肝心なのは、このとき公開状態を「非公開」にしておくこと。というのも、**この固定ページそれ自体はユーザーに見せない**からだ。
あくまでここで利用するのは、ここで入力した項目のほうなのである。

![1575474316481.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/4c8f7a97-815a-4c07-f782-9f52ba35dac7.jpeg)

ちなみに今回は「トップページバナー」という項目を作っている。
※このあと筆者はなんやかんやあってこの固定ページの名前を「設定：トップページバナー」に変えました。


##STEP２：管理画面の見えるところに固定する

固定ページを編集画面として流用している関係上、そのままだと先ほど作った「トップページバナー」は他の固定ページに埋もれることになる。
それでは困るので、先ほど作ったページを管理画面の見やすい位置……ようは**左に見えてる黒いメニュー**に持ってこよう。

まずは先ほど作った「設定：トップページバナー」を開いてみよう。

![1575684262302.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/729e70b4-385a-f828-69e8-1079572d7a17.jpeg)

このような画面が出るはずだが、注目してほしいのは以下の部分。

![1575684232542.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/98faf8d1-d54d-805a-1220-e4008df42459.jpeg)

これが必要になるのでどこかにメモしておく。
そして、`functions.php`に以下のコードを記述しよう。

```php:functions.php

//管理画面に優先度メニューを追加
function mt_add_pages() {
    add_menu_page( '設定：トップページバナー', '設定：トップページバナー', 'edit_pages', 'post.php?post=8&action=edit', '', 'dashicons-admin-customizer', 3);
}
add_action('admin_menu', 'mt_add_pages');

```

成功すると、管理画面が以下のように様変わりする。

![1575684841650.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/17840b4a-34aa-db52-0410-ecc971c7782c.jpeg)

あとは、新しく表示された「設定：トップバナー」をクリックすればいつでもこの編集画面に移動できる。

###余談

ちなみに、先ほどの関数のカスタマイズ方法も載せておく。

```php:functions.php

//管理画面に優先度メニューを追加
function mt_add_pages() {
    add_menu_page( '[管理画面で表示されるタイトル]', '[管理画面で表示されるタイトル]', 'edit_pages', '[固定ページのURL、一部分でもOK]', '', '[タイトルの左に来るアイコンを指定]', [半角数字で、このメニューを表示する順番を書く]);
}
add_action('admin_menu', 'mt_add_pages');

```

※アイコンは[こちらのページ](https://developer.wordpress.org/resource/dashicons/#admin-customizer)、表示する順番は[このページ](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_menu_page)に掲載されている。
※編集画面がウチのとなんか違う！と不安になった人は「Classic Editor」でググれ。


##STEP３：固定ページに入力項目を作成する

ところで今の固定ページ、そのままだと「タイトル」「パーマリンク」「本文」くらいしか入力項目がない。
ということは、この入力項目を設定することも必要となる。
方法は色々あるが、今回はプラグイン「Advanced Custom Field」、通称ACFを使って項目の設定を行おう。

![1581316259382.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/05d0ab00-cdb8-aefa-09fd-2aec778c1a7a.jpeg)

プラグインに頼らない手もあるにはあるが、今回コレを選んだのには訳がある。
このACF、入力項目を簡単に「作る」ことができるだけでなく、「消す」こともできるからだ。

ACFの詳しい使い方は[こちらのブログ](https://kotori-blog.com/wordpress/advanced-custom-fields/)と[このブログ](https://haniwaman.com/advanced-custom-fields/#Advanced_Custom_Fields-2)に載っている。
細かい部分はそちらに譲るとして、今回はざっくり説明しよう。

![1581318905858.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/8c758198-6fee-f57e-324b-7b97936788a1.jpeg)

まず、フィールドタイプを選択する。
次に、フィールド**名**に英数字でてきとうな内容を入力する。（フィールド**ラベル**ではないので注意だ。）
以上。これで終わりだ。

###おまけ
上述した「消す」とは、以下の画像にあるステータスのことを指す。（下の方にあります）
![1581316853370.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/3aee2b97-5c9e-3fc2-4aaf-e8ae4082e756.jpeg)

このようにチェックを入れることで、本来あったはずの「アイキャッチ」や「コンテンツエディタ」を消すことができるぞ。
たとえばこんなふうに。
![1581319101084.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/b9a3e49d-ec94-3377-cb3d-a65b7f25957a.jpeg)


##STEP４：出力コードをかく
![1581319186014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/0dc545aa-74fd-1151-e80f-dbb6ad05e572.jpeg)
さて、入力項目を作った以上、それを出力する必要も当然ある。
今回、独自の内容を挿入したい場所はトップページ(index.php)だから、index.phpを操作する。

![1581318044646.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/d7f57587-bd95-acc1-c942-a5665699f479.jpeg)
まずは見た目を整えてやり。。。

次に、以下のコードを文章を記入したい場所に記述する。

```php:index.php

<?php echo get_field('mycomment', 8); ?>

```
すると……
![1581319341492.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/1fdbec85-e4ac-aee7-dbfb-a3b748029668.jpeg)
よし。うまくできた。


ところで、先ほどのコードで出てきた` 8 `、なんの数字か覚えているだろうか？

![1575684232542.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416995/98faf8d1-d54d-805a-1220-e4008df42459.jpeg)

上の方で使ったページID。
ＡＣＦはこのように「フィールド名」と「入力画面となるページのページＩＤ」を入力することで、**特定の固定ページに記入した内容を無関係な別のページに表示することができる。**
この仕組みを応用することで、あたかも特定のページから別のページの一部分だけを編集できるような仕組みを作り上げることができるのだ。
なお、最終的に出来上がったのは以下のようなコードになる。

```php:index.php

<style>
.in_the_sukima{
    background-color: #ffffff;
    border: double 6px #cd2653;
    width: 90%;
    margin: 1em auto 0 auto;
    padding: 1em 2em;
}
</style>
<div class="in_the_sukima">
    <p><?php echo get_field('mycomment', 8); ?></p>
</div>

```

もしあなたがこの記事を利用するつもりなら、'mycomment'のところをあなたが設定したフィールド名に、` 8 `のところを設定ページのページIDに変えればうまくいくはずだ。

#おわりに

分かりにくい点などあれば編集リクエストをお願いします。

#参考文献

https://qiita.com/konweb/items/330f735a899e448ef876