code readingと言いつつ、「読みながら & 動かしながら & ググりながら」という感じです。
が、流石 wordPress!! よくできてる!!
主要 file & dir
path | note | |
---|---|---|
1 | wp-admin/ | 管理画面 |
2 | wp-includes/ | wordpress core |
3 | wp-content/languages/ | |
4 | wp-content/plugins/ | プラグイン |
5 | wp-content/themes/ | テーマ |
6 | wp-content/upgrade/ | |
7 | index.php | 1)call wp-blog-header.php 2)run wp() 3)call template-loader.php |
8 | wp-blog-header.php | call wp-load.php |
9 | wp-load.php | call wp-config.php |
10 | wp-config.php | call wp-settings.php |
11 | wp-config-sample.php | |
12 | wp-settings.php | install時に自動生成 |
13 | wp-activate.php | install時以外は不要? |
14 | wp-signup.php | ↓ |
15 | wp-login.php | login |
16 | wp-comments-post.php | comment処理 |
17 | wp-trackback.php | trackback処理 |
18 | wp-links-opml.php | opml形式でのexport? |
19 | wp-mail.php | access triggerのmailで投稿 |
20 | wp-cron.php | access triggerの擬似cron |
21 | xmlrpc.php | xml-rpc |
- ※詳しく見ていないphp scriptもありますが、それらは https://developer.wordpress.org/reference/ 等をご覧下さい
- ※要件にもよりますが、NO.16以降は、攻撃者に狙われやすい気がします
通常の処理の中心は、wp-blog-header.php
詳細は、次のurlがとっても分かりやすいです。
wp-content/themes/ 以下の構成
主要構成
path | note | |
---|---|---|
1 | themes/theme-name/ | thema directory |
2 | themes/theme-name/style.css | 要meta info |
3 | themes/theme-name/index.php | main template |
4 | themes/theme-name/functions.php | hookによるcustomize |
themes/theme-name/style.css
Main Stylesheet (style.css) | Theme Developer Handbook | WordPress Developer Resources
単なるcssではなく、wordpressが認識するメタ情報を コメント形式( / ~ /)で記載する必要があります。
最低限、以下のように「Theme Name」だけでもwordpressは認識するようです。
/* Theme Name: endt0tknr's test */
themes/theme-name/index.php
実際はリクエストに応じた複数のtemplateを用意すると思いますが、 殆ど空の index.php を用意するだけでも、動作はするようです。
themes/theme-name/functions.php
プラグイン的なhook処理を追加できるようです。
functions.php
add_filter() と add_action() の2種類のhook関数
hook関数には、値を返すadd_filter()と、返す必要のないadd_actionがあります。
add_filter($tag, $function, $priority, $args_size); add_action($tag, $function, $priority, $args_size);
変数 | note | default | 必須 |
---|---|---|---|
$tag | hook名 | - | 必須 |
$function | 自作の関数 | - | 必須 |
$priority | 優先度. 小さい程、先に実行 | 10 | - |
$args_size | 引数の数 | 1 | - |
例
function insert_feed_posts() { //トップページのRSS表示用関数 $showing_number = 4;// 表示件数設定 $corporate_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $corporate_category_id = get_cat_ID('ニュース'); $corporate_rss = $corporate_url . 'category/news/feed/'; : } add_action('feed_get_event', 'insert_feed_posts'); function custom_editor_settings( $initArray ){ $initArray['body_class'] = 'entry-content'; return $initArray; } add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );
hook名一覧
次のurlの WordPress Hooks Database ように、非常に多くのhookがあります。
プラグイン API/アクションフック一覧 - WordPress Codex 日本語版
override可能な関数一覧
wp-includes/pluggable.php にある 「if ( !function_exists(‘get_userdata’) ) :」 のように記載された関数はoverride okのようです。 (この場合、get_userdata)
テンプレート階層
wordpressは、使用するtemplateをリクエスト内容に応じて選択しますが、 選択されるtemplateが一意に決定されなくても階層構造になっています。 詳細は次のurlの通りで、これを読むと、テーマには最低限 index.phpだけで十分なことがわかります。
テンプレート階層 - WordPress Codex 日本語版
wordpressの主要グローバル変数
https://wpdocs.osdn.jp/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0 wordpress codex 等に詳細がありますが、あまりに大量の為、抜粋します
変数 | note |
---|---|
$wp | main context? 大事!! |
$wpdb | db access if |
$wp_rewrite | routing |
$current_user | |
$id | 投稿id |
$post | 投稿data |