• 解決済 wordt777

    (@wordt777)


    VSCode、phpcs(v1.0.8)を使用してコードのチェックをしています。
    functions.phpのコードに対して、エラーメッセージが表示されます。

    【functions.php】
    function change_menulabel() {
    global $menu;
    global $submenu;
    $name = ‘お知らせ’;
    $menu[5][0] = $name;
    $submenu[‘edit.php’][5][0] = $name . ‘一覧’;
    $submenu[‘edit.php’][10][0] = ‘新しい’ . $name;
    }

    【メッセージ】
    Overriding WordPress globals is prohibited. Found assignment to $menu
    ($submenuに対しても同じメッセージが表示されます)

    グローバル変数を使わないように修正してみたりしましたが、うまく動きませんでした。
    対処法のアドバイスを頂ければ幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは。

    https://www.fixes.pub/program/85194.html
    「WordPressのグローバルをオーバーライドすることは禁止されています」
    からの
    「これは間違った習慣です。その製品にはwp_queryを使用する必要があります」

    みたいです。
    ところで、どういったことをされようとしているでしょか。
    それによって、対処するときに、利用できるAPIが決まるのだとおもっております。

    admin_menu フックでメニューを書き換えようとしているのだと思いますが、グローバル変数を使った例はこのリファレンスにもありますので、間違った使い方ではありません

    また WordPress の PHPCS にはいくつかのルールセットがあり、そのルールは WordPress-Extra で定義されています。
    https://github.com/WordPress/WordPress-Coding-Standards/blob/db97a6e5d20dfca706b0951a7b3ff3c0567ec78d/WordPress-Extra/ruleset.xml#L96-L98

    対処方法は二つあります。

    WordPress-Extra をルールに含めない

    例えば、phpcs.ruleset.xml などを定義しているとして、

    <?xml version="1.0"?>
    <ruleset name="WordPress Theme Coding Standards">
    	<rule ref="WordPress-Core" />
    	<rule ref="WordPress-Extra" />
    </ruleset>

    これを

    <?xml version="1.0"?>
    <ruleset name="WordPress Theme Coding Standards">
    	<rule ref="WordPress-Core" />
    </ruleset>

    こうします。

    その箇所だけそのルールを無視する

    無視したい行の上に、以下のように記述します。

    // phpcs:ignore WordPress.WP.GlobalVariablesOverride

    トピック投稿者 wordt777

    (@wordt777)

    syntaro様、Aki Hamano様、ご回答頂きありがとうございます。
    Aki Hamano様が仰るとおり、admin_menuフックでメニューを書き換えようとしています。
    コード自体が間違ったものではないとのことで安心しました。
    どこまでメッセージに従うべきなのか加減が分からなかったのですが、場合によっては「WordPress-Extraをルールに含めない」「その箇所だけそのルールを無視する」という方法を取った方が良いのですね。
    具体的な対処法まで詳しく教えて頂き、本当にありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「Overriding WordPress globals is prohibitedへの対処法」には新たに返信することはできません。