[USO]WordPress 検定試験 – 解答編

さめないうちに・・・。 ということで、早速解答編であります。 わざわざトラックバック解答いただきました Masayan さんありがとうございました!! 🙂

[USO] 検定試験模範解答

先ごろ行われました WordPress 検定試験ですが、皆さん受験されましたでしょうか。合格発表までの間に答合わせをして合否を予想しておきましょう。なるべく、ショックが少ないように・・・。

でははりきっていきましょう~。

Q1.

プラグインファイルの格納場所を WordPress のルートディレクトリからのパスで答えなさい。 そらで書いてね。

答えは、

wp-content/plugins

wp-contents/plugin とか wp-contents/plugins は不正解。 😛 まぁまぁそらで、はおいておいて WP つかうなら基本事項でありました。

次~。

Q2.

テーマファイル内で CSS や JS、イメージファイルをリンクする場合に使われる、テーマディレクトリまでのパスを自動で生成してくれるテンプレートタグは何? リファレンスみていいです。。

答えは、これは複数解答ありますね~。 いづれか。

bloginfo(‘template_directory’);

bloginfo(‘template_url’);

ほかにも同一動作できるオプションありそうですが、基本的にはこの2つだと思います。 ちなみに、CSS ファイルまでのパスは

bloginfo(‘stylesheet_url);

という専用のオプションで style.css まで含めて生成してくれます。

WordPress のテーマは、wp-content/themes/[テーマ名]/ に格納されますが、ブラウザからみればアクセスはそこのパスではなくて別のディレクトリ。 たとえば、このサイトだと、

https://another.maple4ever.net/

でテーマがみえます。 / ルート。 /blog/ とか /wp/ の方もいるでしょう。

たとえば、テーマファイルの中で相対パスをつかってしまうと、ブラウザは単純にみえているパスからの相対でたどりますので、wp-content/themes/[テーマ名]/ にはいきつくことができずリンクがきれてしまいます。

なので、画像リンクとか JS とかはテーマファイルまでの絶対パスでかかねばなりませんが、普通に書いてしまうと [テーマ名] 部分が可変にできず調子がわるい。 ってことで準備されているのが、template_directory 系のオプションです。 テーマとかでパスを指定するときは、こいつに URL をつくってもらえばOKです。

ただし、style.css ファイルの"中"でのパスの指定は相対でOKです。 なぜなら、style.css 自体はブラウザに既に読まれていますので、パスがちゃんと決定しているからです。

WordPress のテーマ作成でひっかかりそうなのは、このへんですね。 🙂

では、次。

Q3.

管理画面からパーマリンクを設定してみてから、ブログのサイト内リンクをクリックしてみたらあちこちで 404 not found とでてしまいました。 この理由で考えられるのは、 .htaccess ファイルが生成できなかった以外で、もうひとつは何?

環境問題。

WP のパーマリンクは、Apache の mod_rewrite という拡張モジュールを設定する形で実装されています。 この設定は .htaccess というファイルにかかれます。

答えは、

Apache が mod_rewiter モジュールを読み込んでない。

でした。

拡張モジュールだけに、mod_rewrite が入ってないサーバもたまにあります。 レンタルサーバだと手出しできない世界なので、この場合は管理者さんにお願いするか、あきらめるかということになります。

XAMPP とかも標準で mod_rewrite をよんでくれていませんので気をつけましょう。 モジュール自体ははいっていて、httpd.conf に mod_rewrite 設定がコメントアウトで存在するので、はずして再起動でいけます 🙂

次々。

Q4.

WordPress のマイナーアップグレードがありました。その差分ファイルは、wp-atom.php、template-loader.php、wp-db.php の3つでした。 このバージョンアップは matt が何か間違いをやらかしています。 なんでしょう?

ひらめき問題。 Masayan さん、さすがです。

答えは、

version.php が入ってない。

WP はバージョンナンバーが version.php に入っています。 ってことで、バージョンアップの場合はこれが必ず書き換わります。 ない場合は、matt が忘れたってことで。 差分ファイルでアップロードした場合はこれを確認してみるといいかもしれません。

つぎぎ。

Q5.

WordPress の管理画面系以外のプログラムエントリ(スタート)ポイントは、index.php と RSS フィード系と、あとひとつは何系?

答えは、

秋葉系。

うそです。

PHP はアクセスしたファイルから処理がはじまるってことで、これをエントリポイントとかいいますが、この種類を問う問題。 ほかにもありそうな気がしてきましたが、想定解答は、

API 系 (xmlrpc.php, wp-app.php)

XMLRPC と Atom Publishing、総称して API 系(銘銘おでさん)。 管理画面をつかわずに外部から投稿するインターフェースでした。

つぎぎぎ。

Q6.

index.php に入っている、define(’WP_USE_THEMES’, true); って何のためにある?

実は Q5 とちょっと関連する問題。 特に解答は決めてなかったのですが、

この定数が true じゃないと WordPress は HTML をださない。

テーマの HTML を出さずに WP の機能を使いたいときには、index.php をとばして

require_once(‘./wp-config.php’);

するとテーマ表示せずに WP の機能が使えるのでそういうときに使う。

くらいでしょうか。 true じゃない状態でアクセスすると真っ白な画面がでてきます。

要は RSS とかの"テーマはださないけど他のWPに関する処理したいファイル"は WP_USE_THEMES が true じゃない状態でプログラムをかけば OK です。

たとえば、wp-tegaki とかもこの機能をつかって、独自に WP の機能だけつかって、画像をだしています。 AJAX のエントリポイントとかもそうですね。

わざわざ、wp-config.php をテキストファイル読みして、DB の接続先取得して独自に DB アップデートしている WP プラグインみたことありますが、こんなことしないでプログラムの頭で require_once(‘./wp-config.php’); するだけで WP の全機能が自分のプログラムから使えるようになります。 🙂

次は歴史編。

Q7.

WordPress 1.2 -> 1.5 のときに搭載された、近代 WP 動作はなんでしょうか?

いくつかありますが、一番大きいのは

差し替え可能なテーマファイルが使えるようになった。

でしょうか! 1.2 まではひとつのテーマ(?) しかつかえませんでしたが、これがテンプレート方式で差し替え可能になったのが 1.5 でした。 静的ページが使えるようになったのもこのころ。

Changelog/1.5 « WordPress Codex

  • Multiple Theme Support
  • Static Pages
  • Better Admin Interface
  • Dashboard

最後のとりは、番外編。

Q8.

MMRT Diary Life の Masayan さんがたまにおみまいしてくる、うそかまことかわからない記事は何通信社から発布されている?

答え!!

[tegaki]USO通信社[/tegaki]

hiromasa.(zone|another) は、MMRT の弟分ブログです。 これからもよろしくお願いいたします。 🙂

まーまー紛れの多い問題でしたが、問題つくるのって結構たいへん。

そのまま FAQ とかになれそうなものをつくるつもりで、すぐにお笑いにはしってしまいました。 まじめな方、だれかつくってくれないかなーと思いつつ、終わるのでした。 🙂

PHP で遊ぼう(ハテナ) – 手続き型とアルゴリズムと

hiromasa.zone の MySQL があいかわらず落ちているため、このシリーズが何回目かわからなくなってしまったのでとりあえず (ハテナ)。

プログラム言語はコンピュータに何か処理をさせるための記述の塊ですが、プログラマと呼ばれる人は、そのコンピュータ言語に合わせて"普段の生活でやっていること"の記述をかける人です。

別にたいしたことをやっているわけではありません。 たとえば、前に書いたような、大きいものと小さいものの並べ替えとか、異なる種類のものの振り分けとか、そういった普段の生活でもやっているようなことを、言葉に置き換えているだけ。

人間は体で覚えてしまっているやり方とか、経験的にそうなることがわかっているのでやり方を意識していない部分というのがありますが、これを丁寧に紐解いていって最終的にコンピュータ言語に置き換えるのが仕事です。

コンピュータ言語というのは、こういった"やり方"をきわめて紛れなく記述できる人間のための言語です。 最終的には人間の言葉で書かれた仕様書なんぞ紛れが多くていらなくなります。

人間「1ヵ月後に実施する。」

1ヵ月後って 30日後? 31日後? 次月同日?

31日月末から1ヵ月後っていつ? 次の月が 2月だったら? 28日? あ、29日も考えないと。

等々。

人間の言葉でかかなければいけないのは"なんのためにやるか" というコンピュータ言語でかけない部分。

なんて、実はこれは夢物語。 現在はコンピュータに指令するための特有の記述も混在してしまい純粋にそれだけを書くことができず、時間もかかるので言葉としてはまだまだです・・・。

さて、このような何かのやりたい事を紐解いた手順を、アルゴリズムと呼びます。

アルゴリズム – Wikipedia

アルゴリズム (algorithm) は、なんらかの問題を解くための手順のことである。算法(さんぽう)と訳されることもある。

コンピュータにアルゴリズムを指示するための(電子)文書をプログラムという。人間より早く大量に正しい結果を導くことができるのがコンピュータの強みであるが、そのためには正しいアルゴリズムにもとづくプログラムが必要である。

だから、ソースコードを見られるというのは結構恥ずかしい。 なんといっても自分の思考の流れを赤裸々に人に見られるわけで、友達プログラマいわく「裸を見られるより恥ずかしい」です。(笑)

たとえば、AとBと書かれたカードが裏返しにおいてあって、そのカードの配置を知りたいとします。 どうすればいいかといえば、一枚めくってそれが A なら片方は B。 逆もしかり。 一枚だけめくるだけで片方は決まるので、2枚めくる必要はないわけですが、人によっては一応両方めくることをするでしょう。

1枚だけめくるのを言語になおすと、たとえば

   1: <?php
   2:  
   3:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   4:     $card1 = 'B';
   5:     $card2 = 'A';
   6:  
   7:     // カード1判定
   8:     if($card1 == 'A') {
   9:         echo 'カード1 は A です。';
  10:         echo 'カード2 は B です。';
  11:     } else {
  12:         echo 'カード1 は B です。';
  13:         echo 'カード2 は A です。';
  14:     }
  15:  
  16: ?>

こんなかんじ。 "めくる" ってのは if で表現しています。

両方めくってみる人なら、

   1: <?php
   2:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   3:     $card1 = 'B';
   4:     $card2 = 'A';
   5:  
   6:     // カード1判定
   7:     if($card1 == 'A') {
   8:         echo 'カード1 は A です。';
   9:     } else {
  10:         echo 'カード1 は B です。';
  11:     }
  12:  
  13:     // カード2判定
  14:     if($card2 == 'A') {
  15:         echo 'カード2 は A です。';
  16:     } else {
  17:         echo 'カード2 は B です。';
  18:     }
  19:  
  20: ?>

こんな感じ。 両方めくるので if が 2つになっています。

こんな風に、その人の思想によってプログラムも変わってきます。 思考の流れがプログラムから読めます。

片方だけみる派閥の人から見れば、片方だけめくるだけでよく、効率がよいので、両方みる派閥の人に対して「なにやってんだか」となります。 なんだかあたまのわるさを露見しているみたいなときもあるわけで、このへんがプログラマの一番のストレスとなるぶぶん。

そして3人目の人が現れて、は?って。

   1: <?php
   2:  
   3:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   4:     $card1 = 'B';
   5:     $card2 = 'A';
   6:  
   7:     // は?
   8:     echo "カード1 は $card1 です。";
   9:     echo "カード2 は $card2 です。";
  10:  
  11: ?>

まー最後のは半分冗談ですが、状況によって、将来 C カードが増える可能性を考慮してプログラムをかかなければならないこともあり、結構神経をつかう部分でもあります。

職業柄、(自分のことはたなにあげ) 人の書いたプログラムをなおしたり、アドバイスしたりしなければいけないこともありますが、最近は"思想的な部分"については、きちんと動作しているかぎり自分のイメージと違ってもそっとしておくことにしています。 お疲れのときもあるですしね。

その部分についての指摘は、どーも人格まで否定しているような気がして・・・。 考えすぎですか。(笑)

ちなみに、人のつくってくれたラーメンにはコショウをいれない派です。 🙂

[USO]WordPress 検定試験

好きこそもののあわれなり。 学校の勉強はきらいでしたが、WordPress 検定試験とかあったらなんとなくうけてみたい今日この頃。 誰か作ってくれないかなと、いいだしっぺの法則で出題してみることとします。 🙂

初級編

Q1.

プラグインファイルの格納場所を WordPress のルートディレクトリからのパスで答えなさい。 そらで書いてね。

s のつく位置がポイントか!? そうでもないか。

Q2.

テーマファイル内で CSS や JS、イメージファイルをリンクする場合に使われる、テーマディレクトリまでのパスを自動で生成してくれるテンプレートタグは何? リファレンスみていいです。。

・・・なぜならぼくも忘れました(笑)

中級編

Q3.

管理画面からパーマリンクを設定してみてから、ブログのサイト内リンクをクリックしてみたらあちこちで 404 not found とでてしまいました。 この理由で考えられるのは、 .htaccess ファイルが生成できなかった以外で、もうひとつは何?

サーバの環境問題は難しいですな~。

Q4.

WordPress のマイナーアップグレードがありました。 その差分ファイルは、wp-atom.php、template-loader.php、wp-db.php の3つでした。 このバージョンアップは matt が何か間違いをやらかしています。 なんでしょう?

ぼのさんには一瞬で答えられた問題。 🙂

上級編

Q5.

WordPress の管理画面系以外のプログラムエントリ(スタート)ポイントは、index.php と RSS フィード系と、あとひとつは何系?

紛れがありそうな問題ですが、そこはのりで。

Q6.

index.php に入っている、define(‘WP_USE_THEMES’, true); って何のためにある?

何っていわれても困るか。(笑)

歴史編

Q7.

WordPress 1.2 -> 1.5 のときに搭載された、近代 WP 動作はなんでしょうか?

移行は大変だったけど、いまやこれがなきゃ困る。

番外編

Q8.

MMRT Diary Life の Masayan さんがたまにおみまいしてくる、うそかまことかわからない記事は何通信社から発布されている?

このエントリもそうだったりする。

以上、8問。 いまいちいい問題がつくれなかった。。 誰か本気でつくってください!

上級編はわけわからんですが、ネタで答えてもらえると幸いです。

さぁ、答えをみんなでトラックバック。 解答は CM のあと。

Web に続く! 🙂