(ドラフト)WordPressのソフトウェア構造等を見てみる

# 1.はじめに
WordPressは、[世界で1/3のサイト](https://wordpress.org/news/2019/03/one-third-of-the-web/)が使っているWebサイトのコンテンツ管理ソフト(CMS)で有力なソフトである。WordPressを操作する必要が発生したので、ちょっと調べてみる。
ふと見ると、WordPressの解説本を読んだほうが、まとまっていて良い気もする。
##入門資料
+ [(西沢直木)WordPressの使い方](https://www.nishi2002.com/wpinfo)
+ [(サルワカ)WordPressユーザーにおすすめしたい7冊の本（初心者〜上級者向け）](https://saruwakakun.com/html-css/wordpress/wpbook)

# 2.各種情報
## 2.1.運用者向け資料
+ [WordPressの教科書](https://hyperschool.net/textbook/wordpress/)

###バックアップ
データベースとwp-content配下のコード

+ [(サルワカ)WordPressでバックアップを取る4つの方法（初心者向け）](https://saruwakakun.com/html-css/wordpress/backup)

###WordPress権限
- [覚えておきたいWordPressのユーザー権限の種類と登録方法](https://bazubu.com/how-to-setup-wp-users-23705.html)
- [Roles and Capabilities](https://wordpress.org/support/article/roles-and-capabilities/)
- [ソースコード(権限テーブル)](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/schema.php#L708)

###WordPressのルーティング処理
記事のURL指定の話である。いわゆるMVC構成をとるWebアプリケーションフレームワークでのルーティング処理に該当する設定ファイルは無い。単に、該当URLに相当するページをDBから検索して表示する機能([Rewrite API](https://codex.wordpress.org/Rewrite_API))があるだけである。

####参考資料
- [Template Files](https://developer.wordpress.org/themes/basics/template-files/)
- [Template Hierarchy](https://developer.wordpress.org/themes/basics/template-hierarchy/)
   - [(日本語訳)テンプレート階層](https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4)
- [関数リファレンス/WP Query](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/WP_Query)
- [Class Reference/WP Rewrite](https://codex.wordpress.org/Class_Reference/WP_Rewrite)
   - [Rewrite API](https://codex.wordpress.org/Rewrite_API)

### サブドメインでのサーバの上げ方
- [エックスサーバーでサブドメインを設定してWordPressを設置する方法](https://server-hikaku-guide.com/xserver-subdomain/)

## 2.2.開発者向け資料
+ [WordPressユーザーのためのPHP入門 はじめから、ていねいに。[第3版] ](https://www.amazon.co.jp/dp/4844368893/)
+ [エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜](https://www.slideshare.net/yuka2py/wordpress-wordpresswebapp)
+ [(Codex)Developer Documentation](https://codex.wordpress.org/Developer_Documentation)

### ディレクトリ構造

```
.
└──public_html
    ├── robots.txt     (検索エンジン向けアクセス拒否ファイル)
    ├── sitemap.xml    (検索エンジン向け構造提示ファイル)
    ├── wp-config.php  (WordPress設定ファイル)
    ├── index.php      (HTTPDサーバから、一番はじめに呼び出されるスクリプト)
    ├── wp-content
    |    ├── themes
    |    |    └── twentyfifteen
    |    └── plugins
    |         ├── gutenberg      (原稿編集エディタ WordPress5より)
    |         └── contact-forms7 (問合せフォームなど)
    └── documents
```
#### 参考資料
- WordPressの設定ファイル(URL/DB/Debug設定等)
   - [wp-config.php の編集](https://wpdocs.osdn.jp/wp-config.php_%E3%81%AE%E7%B7%A8%E9%9B%86)
   - [Editing wp-config.php](https://wordpress.org/support/article/editing-wp-config-php/)
   - [wp config <command>](https://developer.wordpress.org/cli/commands/config/)
+ WordPressの設定
  + [(codex)プラグイン・コンテンツディレクトリを特定する](https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%99%E3%82%8B)
  + [(codex)Determining Plugin and Content Directories](https://codex.wordpress.org/Determining_Plugin_and_Content_Directories)
- WordPressテーマ
   - [twentyfifteen](https://ja.wordpress.org/themes/twentyfifteen/) (2015年版デフォルトテーマ)
- WordPressプラグイン
   - Gutenberg(投稿用エディタ)
     - [WordPress/gutenberg](https://github.com/WordPress/gutenberg)
   - contactform7(問い合わせ用フォーム)
       - [フォームのテンプレートを編集する](https://contactform7.com/ja/editing-form-template/)
       - [タグの使い方](https://contactform7.com/ja/tag-syntax/)
       - [(ソースコード)wp-plugins/contact-form-7](https://github.com/wp-plugins/contact-form-7/)
- 検索エンジン対応ファイル (WordPressとは直接関係ないがホームページの告知のために必要)
   - [Robots.txt Specifications](https://developers.google.com/search/reference/robots_txt)
   - [Sitemaps XML format](https://www.sitemaps.org/protocol.html)

### コード量
WordPressは、PHPだけでも236K(23万行)あるので、全部見るのはちと重い。

```
github.com/AlDanial/cloc v 1.82  T=10.85 s (170.2 files/s, 89892.4 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment          code
-------------------------------------------------------------------------------
JavaScript                     482          52821          75802         247065
PHP                           1000          47331         140851         236130
CSS                            290          23605           7654         130775
Sass                            54           1218             65           5002
JSON                             3              0              0           4554
SVG                             12              0              6           1585
Markdown                         3            130              0            243
HTML                             1             13              0             85
XML                              1              6              0             37
-------------------------------------------------------------------------------
SUM:                          1846         125124         224378         625476
-------------------------------------------------------------------------------
```
WordPress/wp-content以下は、16K(1万6千行)なので、何とか面倒見れる範囲である。

```
github.com/AlDanial/cloc v 1.82  T=0.62 s (665.6 files/s, 174005.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
CSS                             64           9185           3987          51926
PHP                            260           3258           7592          16829
JSON                             2              0              0           4491
Sass                            44           1059             60           4456
JavaScript                      37            586            723           2580
SVG                              6              0              6           1386
Markdown                         2            129              0            241
-------------------------------------------------------------------------------
SUM:                           415          14217          12368          81909
-------------------------------------------------------------------------------
```
### WordPressのデータベース
[Codexにテーブルとその編集画面が記載されている。](https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E4.B8.80.E8.A6.A7)ここでは、主なテーブルを以下に示す。なお、WordPressのWebUIで編集できるものは別途示す。

|テーブル名        |       概要|WebUIでの編集|
|:-----------------|:------------------|:---|
| wp_terms          |              カテゴリ名称 |カテゴリーで編集|
| wp_terms_taxonomy |    カテゴリの説明文など|カテゴリーで編集|
| wp_posts          | 投稿記事テーブル|投稿一覧で編集|
| wp_options        | WordPressのパラメータ設定|メディアアップロード画面等|

#### 参考資料
- [データベース構造] (https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0)
- [WordPressのデータベースのテーブルってどうなってるの？](https://illustswitch.com/database-table/#a03)
- [データベースの基本構造とWordPressのテーブル設計に見るデータモデリング](https://liginc.co.jp/web/wp/other-wp/83467)
- [【初級】WordPressのデータベースをターミナルを使ってバックアップ・復元する](https://qiita.com/kgsi/items/9464f84c1affc23aede3)

# A.参考資料
##コミュニティ
+ [Codexオンラインマニュアル](https://codex.wordpress.org/)
   + [使い方全般 フォーラム](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
+ [ソースコードWordPress/WordPress](https://github.com/WordPress/WordPress/)

##利用例等から
+ [(wp.geek)WordPressでサイト構築！](https://wpmake.jp/contents/knowledge/construct/)
+ [(ferret)WordPressがSEOに強いと言われている理由は？](https://ferret-plus.com/2079)
+ [(WordPress)One-third of the web!](https://wordpress.org/news/2019/03/one-third-of-the-web/) 世界の1/3のサイトがWordPressを利用
+  [(hifive)WordPress保守サービスの比較まとめ[2018年]
WordPress保守サービスの比較まとめ[2018年]](https://highfivecreate.com/blog/wordpress/3594.html)

###リニューアル
+  [(Grow Group)WordPressでWebサイトをリニューアル制作する時の注意点って？](https://grow-group.jp/archives/2294/)
+  [ホームページリニューアルの基本的な進め方まとめ](https://rockvil.jp/blog/how-to-proceed-website-renewal/)
+ [【完全マニュアル】ホームページリニューアルを成功させるための8つのステップ](https://innova-jp.com/all-steps-to-make-the-homepage-renewal-successful/)

###ソフトウェア構成
+ WordPressのソフト構成
  + [WordPressのコアファイルの仕組み。３ステップでざっくりまとめ。](https://nskw-style.com/2010/wordpress/php/summary-of-how-wp-works.html)
  + 8年前だが、WordPresのソフト構造は、あまり変わっていない。
+ WordPressの関数呼び出しフロー
  + [wordpress関数を外から使うにはwp_load.phpを読み込む](https://unskilled.site/wordpress%E9%96%A2%E6%95%B0%E3%82%92%E5%A4%96%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%86%E3%81%AB%E3%81%AFwp_load-php%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80/) 


##レイアウトの変更
wp-content/template配下のコードを変更する。

+ [(カゴヤ)【コピペでデキる】WordPress基本カスタマイズ~入門編~](https://www.kagoya.jp/howto/wordpress/wordpress_customize/)
+ [(西沢直木)WordPressカスタマイズの基本コンセプト](https://www.nishi2002.com/19720.html)
+ [(西沢直木)WordPressテーマの基本構成を理解しよう](https://www.nishi2002.com/21498.html)

##関連知識
- [PHP言語リファレンス](https://www.php.net/manual/ja/langref.php)
+ [(サルワカ)HTMLとCSSの勉強におすすめの本8冊（初心者〜中級者向け）](https://saruwakakun.com/html-css/reference/study)
    + [(サルワカ)HTML&CSS入門 Webデザインをイチから学ぼう](https://saruwakakun.com/html-css/basic)



# B.いろいろ
##(調査中)ファイルアップロード
ファイルのURLを指定したい。(post_contentを編集する必要がある?)
デフォルトパスはwp-content/uploadsである。upload_pathに、パラメータを設定することにより変更できる。そして、外部から見えるURLは、post_contentに記録される。なお、ファイルのURLの一部をなすupload_pathは、wp_optionsテーブルで設定している。

- 参考記事
   - [Change media item permalink](https://wordpress.stackexchange.com/questions/232569/change-media-item-permalink) 
   - [WordPressの画像に強くなる](https://unskilled.site/wordpress%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%A6/)
   - [メディアライブラリ：パーマリンク編集について](https://ja.wordpress.org/support/topic/%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%EF%BC%9A%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF%E7%B7%A8%E9%9B%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
- ソースコード
  - [(ファイル登録画面)WordPress/wp-admin/media-new.php](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/media-new.php) 
     - [function media_upload_form](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/media.php#L1938)
     - [function do_action](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-includes/plugin.php#L428)
         - [add_action // Media hooks.](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/admin-filters.php#L16)
             - [function media_handle_upload](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/media.php#L287)
                 - [function wp_handle_upload](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/file.php#L921)
                      - [`function _wp_handle_upload`](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/includes/file.php#L705)
  - [(パラーメータ設定)WordPress/wp-admin/options-media.php](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-admin/options-media.php)
     - [function get_option](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-includes/option.php#L30)
     - [function wp_load_alloptions()](https://github.com/WordPress/WordPress/blob/5.2-branch/wp-includes/option.php#L191)
- データベース
   - [テーブル: wp_posts](https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0#Table:_wp_posts)
      - [How to get url to content of post or page?](https://wordpress.org/support/topic/how-to-get-url-to-content-of-post-or-page/)
   - [テーブル: wp_options](https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB:_wp_options)

##(検討)検索機能追加
- [WP Google Search](https://wordpress.org/plugins/wp-google-search/)
- [Creating a Search Page](https://codex.wordpress.org/Creating_a_Search_Page)