質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.51%

WordPressで使用してはいけない変数名について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,232

score 57

別の質問をしていてWordPressで使用する変数名について疑問を持つようになりました。

■別の質問 ※特に読んでいただく必要は無いかと思うのですが、念のため
https://teratail.com/questions/59959

例えば、カテゴリーアーカイブで「get_the_category」や「get_queried_object」でカテゴリーの情報を取得する場合、下記のように変数名に「$cat」を使うのはNGなのでしょうか。

■下記はNG?

//変数名「$cat」はNG?
$cat = get_the_category(); //NG?
$cat = get_queried_object(); //NG?

というのも、前回の質問のやり取りで「カテゴリアーカイブでは既に「$catにid」が入っている」という内容の回答をいただいたからです。

ネットで検索していると、「$cat」を変数に使用されている記述を結構見かけます。
※どのテンプレートに使用しているか不明なものもありますが

■よく見かける記述

//よく見かける記述
$cat = get_the_category();
$cat_id = $cat[0]->cat_ID;

カテゴリーアーカイブで「$cat」を使用したらうまく動作しない事象に遭遇しました。

■動作しない記述

if ( is_category(array(1,3,5,…))) {
$hoge = $cat; //←ここが動作しない
}

//上記とは別の場所で使用するために定義
$cat = get_queried_object();
$cat_id = $cat -> cat_ID; // ID取得
$cat_name = $cat -> cat_name; // カテゴリー名
$cat_slug = $cat -> category_nicename; // スラッグ
$cat_link = get_category_link($cat_id); // リンクURL

■動作するようになった記述 ※「$cat ⇒ $categories」 に変更

//動作するようになった記述
if ( is_category(array(1,3,5,…))) {
$hoge = $cat; //←ここが動作するようになった
}

//上記とは別の場所で使用するために定義 ※「$cat ⇒ $categories」 に変更
$categories = get_queried_object();
$categories_id = $categories -> cat_ID; // ID取得
$categories_name = $categories -> cat_name; // カテゴリー名
$categories_slug = $categories -> category_nicename; // スラッグ
$categories_link = get_category_link($categories_id); // リンクURL

変数を決める際は下記を使用しないようにするという理解であっていますでしょうか?
http://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/register_taxonomy#Reserved_Terms

どのように変数名を決めたら良いのか混乱してきました。
皆さんどのように変数名を決めておられるのでしょうか?
初歩的な質問で恐れ入りますが、どうぞ宜しくお願い申し上げます。

===追記===
説明が不足していたように思いますので追記いたします。
最後のリンクは「カスタム分類」の予約語になります。
関数リファレンス/register taxonomy#予約語

「WordPress、予約語」で検索してもこちらばかりヒットしますが
こちらはWordPress全体の変数名としても使わない方が良いものでしょうか。

具体的にWordPressではこの変数名は使ったらNGというものがあるのか、
もしくは単にPHPの変数名のルールに従えば良いのか
この当たりが良くわからず、どうぞよろしくお願い申し上げます。

つたない説明で申し訳ございません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

WordPressは専門外ですが

変数を決める際は下記を使用しないようにするという理解であっていますでしょうか?

WordPressやPHPに限らず、他の言語もそうですが、予約語に挙げられた単語は変数としては使用できません。なので、上記の理解で合っています。

で、肝心の変数の名前の決め方ですが、特にこれと言ったルールはないですが、「目的がわかるような名付け」をするのが妥当かと思います。例えば、キーになるカテゴリーであれば「key_category」とか(すいません、ちょっと、いい例が浮かびませんで)。


以下、私見。
ただ、私的にはWordPressのこの予約語の付け方がイマイチというか、ユーザーの自由度を奪っているように見えます。PHPやRubyといったプログラミング言語ならばまだしも、フレームワーク(実際にはフレームワークではないらしいですが)のWordPressが同様に一般名詞そのままを予約語にしているのはどうかと。予約語にしているというのはシステム内部で使用している(しかもグローバルにですかねこれだと)というわけですが、それならば、システム専用の名付けをするべきではないかと(例えば、WP_という接頭辞を付けるとか)。一般名詞そのままなんて誰もが考えつく変数名ですし。
プログラマブルを謳っている割には、ユーザーに対してすごい制限を課しているように見えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/28 15:06

    ご回答いただきましてありがとうございます。

    私見の部分を興味深く読みました。
    質問でも書きました、よく見かける記述というのは
    もしかすると、単に「category」だから「cat」ってつけておこう
    と言った理由なのかもしれないな、と思ってしまいました。自分を含めて。

    ↓↓↓
    ====
    //よく見かける記述
    $cat = get_the_category();
    $cat_id = $cat[0]->cat_ID;
    ====

    ちゃんと誤動作しないのを理解して付けておられる方もいるのかもしれませんが…
    このあたりが謎です。

    確かにWP_とかの接頭辞をつけて貰えれば、悩まずに済みますよね。

    ただ、リンク先は「register taxonomy」の分類名の予約語で
    これがWordPressの変数にもつけるのはNGになるのかそのあたりが
    よくわからず…
    説明が不足のように思いますので質問に追記してみることにします。
    (WordPressは専門外でおられるとのことですので、念のため…)

    再度、ご親切に回答いただきまして本当にありとうございました。

    キャンセル

+1

テーマの functions.php にいきなり $cat = get_the_category(); というような書き方をしないで

  • 関数を作る
  • クラスを作る

などを行うようにするのはいかがでしょうか? また、 WordPress のテーマやプラグインでは、関数・クラスを作る時は、オリジナルのプレフィックスを付けるのが作法となっています。以下に teratail をプレフィックスにした例を示します。

function teratail_get_post_cat( $post_id ) {
    // 何かしらの処理
}
class TERATAIL_GetMyPosts {
    // 何かしらの処理
}

クラスの場合は、namespace を使うと楽になると個人的に思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/28 15:06

    ご回答ありがとうございます。

    質問がわかり辛かったかもしれませんが、
    functions.phpでは無く、
    カテゴリーテンプレートに$catを使うのはNGなのかを疑問に思っております。

    例えば、下記のようなカテゴリーアーカイブになり得るテンプレートです。
    category.php
    archive.php
    index.php

    もしくはそもそもカテゴリーテンプレートに「$cat = get_the_category();」とは
    記述せずに、functions.phpに関数として記述した方が良い、という意味でしょうか?
    差支えなければ再度教えてはいただけないでしょうか?

    ちなみにfunctions.phpの関数はおっしゃる通りオリジナルの接頭辞を付けるのが
    慣例になっているようですのでつけるようにしております。
    ただ、もっぱらコピーペーストで、理解しきれないで記述していることが多いのが残念なところであります…

    キャンセル

check解決した方法

0

長らく解決済みにせず放置してしまった質問です。
ご回答いただいた内容、勉強になりました。

PHPの予約語に加え、WordPressのグローバル変数は避けた方が良いのだろうなとわかってきました。

WordPress Codex グローバル変数

特に「$post」等は何気なく変数名に使ってしてしまいそうですが、気を付けるようにしたいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る