end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

wordPress ver.4.0.17 の source code reading

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がとっても分かりやすいです。

www.warna.info

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

テーマの作成 - WordPress Codex 日本語版

単なる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があります。

adambrown.info

プラグイン 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