WP: プログラミングTips

WordPress のコードを見ていて気になった箇所をメモします.

▼ 引数が設定されたか?判断する

1
2
3
function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
if ( -1 == $action ) {
    :

▼ edit_user() がエラーを返却したか?チェックする

1
2
3
$user_id = edit_user();
if ( is_wp_error( $user_id ) ) {
    :

▼ エラー判定

is_wp_error
渡された変数が WordPress Error であるかチェックします。
その変数が PHP オブジェクトであり、かつ WP_Error クラスによって生成されたものであるか判定します。
1
2
3
4
5
6
7
8
    :
function login_header( $title = 'Log In', $message = '', $wp_error = null ) {
    :
    :
if ( ! is_wp_error( $wp_error ) ) {
	$wp_error = new WP_Error();
}
    :

▼ ユーザの権限を確認する

1
current_user_can( 'create_users' )

current_user_can: 現在のユーザーが権限を持つ,または,その権限を持つ権限グループに属しているかどうか.

▼ stdClass クラス

PHP では全てのクラスの基本となる stdClass というクラスが存在する.

▼ スタイルシートを読み込む

1
2
3
    :
wp_enqueue_style( 'login' );
    :

というコードがあったので調べてみた.
WordPress では,スタイルシートを読み込む作法があるらしい.

参考: テーマにスタイルシート(cssファイル)を正しい方法で読み込む

▼ wp_cron とは?

WordPress のフォルダ構成を調べていて気になったので,メモしておきます.

参考: wp_cron を使った外部データ取得の非同期化とそのデバッグ方法

<? タグとは?

先日,見たことがあるような?ないような?

<?

というタグを見たので調べた.

php.ini の設定で,short_open_tag を On に設定することで PHP タグを短くすることが出来る.

<?php ~ ?> → <? ~ ?>
<?php echo ~ ?> → <?= ~ ?>

asp_tags を On に設定されている場合

<? ~ ?> → <% ~ %>

特別な理由が無い限りは <?php ~ ?> を使用することが推奨されるとのこと.

WP: WordPress の主なグローバル変数

$post 投稿情報
$posts 投稿情報 配列 / 投稿のコンテンツを nextpage 要素で区切ったページ
$page 投稿のページ番号
$wp_query WP_Query クラスのグローバル・インスタンス.ブログへの複雑な投稿やページのリクエストを扱う
$wpdb データベース アクセス
$id カレント投稿情報ID

参考: グローバル変数

WP: WordPress テンプレートについて

WordPress について隙間時間で勉強しているのだが,カスタマイズ手法についての書籍を読んでもピンとこなくて,とても苦労した.
振り返ってみると,WordPress で使用されている用語に関する知識がなかったと言うのが,大きい理由のように思う.

例えば,テンプレートという言葉はコンピュータ用語として広く使われているので,ある程度機能を想像することができるが,WordPress においてはどのようなものをテンプレートと呼び,テンプレートの実装はどのようにされているのか?なぜそのような構造になっているのか?がある程度分かってこないと,得た知識が身近に感じられなかったように思う.

といわけで,忘れないようにメモしておく.

- ページを構成するファイルを WordPress では,テンプレート ファイルと呼ぶ.
- それぞれのテンプレート ファイルをまとめて,1つのページを構成している.
- まとめているファイルは大抵 index.php で,他のテンプレート ファイルをインクルード タグで呼び出す.
- 複数のテンプレートで,テーマは構成されている.
- 用意されているテンプレートは,テーマにより異なる.
- テンプレートに記述されているテーマが用意するタグは, functions.php に実装されている.
- WordPress が用意するテンプレート タグは,wp-includes ディレクトリにある.
- テンプレートの適用には優先順位がある.(テンプレート階層を参照)
- スタイルは,style.css にある.

用語の大半がコンテンツ提供者への概念であって,カスタマイズを行うデベロッパへの概念ではないように感じられました.
PHP で書かれた関数なのにどういう違いがあるのか?理解するのに苦労したような気がします.

基本的に WordPress のカスタマイズとは,テーマ作成のことであって,システム改変ではないということも念頭に置いておく必要があると思います.
(私はよく分からなかったので,情報の整理が出来なかった…(>_<))

WP: formタグのaction属性がなかった件

WordPress 管理画面の「新規追加」ボタン押下時の処理について,コードを確認しました.

以下の赤枠のボタンです.

html では,以下のコードとなっています.

1
2
<a href="http://localhost:8888/wordpress/wp-admin/user-new.php" 
    class="page-title-action">新規追加</a>

早速,wp-admin/user-new.phpをみていきます.
新規ユーザーを追加する処理は,このファイルで処理されているようです.

次に,「新規ユーザーを追加」ボタン押下時に呼ばれる処理を探しました.

1
2
3
4
5
6
<input type="submit" 
    name="createuser" 
    id="createusersub"
    class="button button-primary" 
    value="新規ユーザーを追加" 
    kl_vkbd_parsed="true">

input が属する form の action 属性を参照すれば,呼ばれているコード ファイルが分かると思いましたが,action 属性を見つけることが出来ませんでした.

1
2
3
4
5
<form method="post" 
    name="createuser" 
    id="createuser" 
    class="validate" 
    novalidate="novalidate">

実際には,user-new.php 内の処理を参照すると「新規ユーザーを追加」ボタン押下時の処理も記載されているようですが,なぜこのファイルが呼ばれるのか?が分かりませんでした.

結局,HTML5 仕様をみて分かったのですが,

タグの action 属性が削除されている場合は,送信先はそのファイルとされるようです.

参考: 「action属性」で「送信先のURL」を指定しよう

HTML5 からの仕様として,action属性が必須でなくなった.
タグのaction属性が省略されている場合,送信先はそのHTMLファイル自身となる.

知らなかったので,メモしておきます.
これ知らないと分からないよなー

PHP: header() でリダイレクトさせている理由

先日からPHPを勉強しています.
PHPユーザ歴は長いのですがちゃんと体系立てて勉強してこなかったので,ここらで断片的な知識を体系立てて整理したいと思い,改めて勉強しています.
ですが,いざ始めてみると必要とされる知識の範囲がとても広く苦労しています.
html, css3, javascript, jquery, sass, php, wordpress, bootstrap4, cakephp など…

先日まで php でリダイレクトする場合に header() 関数を使用しますが,「なぜ header() を使用するのか?」と考えていました.
リダイレクトという単語ではなく,なぜ header っと考えていました.
HTTPヘッダ仕様については知っていましたが,理解が出来ていなかったわけです.

というわけで,改めて HTTP仕様をざっとチェックすることにしました.

参考: HTTP入門
参考: 【PHP】header()関数

これは時間かかるなー

p.s. wordpressコードをみていて,ルールがあるのか?知りませんが,コメント「// Main」以降に処理が記述されていることが多い思います.

PhpStorm で関数一覧を表示する

私が使用している PhpStorm は 2019.1 なのですが,関数一覧はどこから表示するのか分からなかったので,調べました.

以下の添付画像の赤枠をクリックすると Structure が表示され,参照できます.
大きめのファイルでもざーっとどのような関数が提供されているのか?確認できますね.

WP: 投稿を取得する処理を眺めてます

先日からざっと WordPress の投稿を表示する処理を眺めています.

規模が大きいのでまだ全然分かりませんが,フォルダ構成とか初歩的なPHPの記述だったり,記事を表示するまでのざっくりした処理の流れは少し親近感がでてきました.
エントリ ポイントから記事を表示するまでを簡単にまとめてみました.
これからは,関数などを詳細に調べていくのがいいのか?
ただ眺めているよりは,テーマを見つけてカスタマイズ作業を通して理解を深めた方がいいのか?と思案中です.
この作業は結構時間がかかるなぁー.
過去,数年で何度も忙しさを言い訳に挫折しているからなー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// ▼index.php
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
// 	▼wp-blog-header.php
	// 1. WordPress ライブラリのロード
		wp-config.php でデータベース設定,デバッグモードなど各種設定を読み込む
		wp-settings.php
	// 2. WordPress クエリのセットアップ
	wp();
		WordPressのオブジェクトを生成して,グローバル配列にセット
			$GLOBALS['wp_the_query'] = new WP_Query();
			$GLOBALS['wp'] = new WP();
// 		▼functions.php
		function wp( $query_vars = '' ) {
// 			▼class-wp.php
			public function main( $query_args = '' ) {
				$this->init();
				$this->parse_request( $query_args );
				$this->send_headers();
				$this->query_posts();
				$this->handle_404();
				$this->register_globals();
					query_vars property をグローバル配列にセットする
	// 3. テーマ テンプレートのロード
// 	▼template-loader.php
		require_once( ABSPATH . WPINC . '/template-loader.php' );

WP: WP_Query について

WordPress のコードをみていて,重要そうなクラスがあったので調べてみた.

The WordPress Query class.
WP_Queryとは,WordPress でブログの投稿やページの情報を取得する場合に使うクラス.とのこと.

どのような検索ができるのか?ざっと確認しておけばよいのでしょう.

参考: 関数リファレンス/WP Query
参考: いっつも忘れるWP_Queryの使用方法とパラメータ一覧。がっつり整理してみた
参考: WP_Queryの使い方をPHPコードにまとめた便利なコード・スニペット
参考: これは便利!WordPressのWP_Queryでよく使うコードスニペット

WP: テンプレートタグ

WordPress のテンプレートタグは,幾つかの種類があるようだったので,まとめた.

テンプレートタグファイルは wp-includes ディレクトリに格納されている.

インクルード タグ
インクルード タグは、あるテンプレートファイル(例えば index.php)の中で、他のテンプレートファイル(例えば header.php)の HTML や PHP を実行するために使う.

条件分岐タグ
条件分岐タグ (Conditional Tag) は、テンプレート ファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使用する.
注: 条件分岐タグが使えるのは,WordPress の posts_selection アクションフックの後のみとのこと.