web-dev-qa-db-ja.com

Functions.phpでグローバル配列を定義しますか?

私は私のテンプレートファイルとfunctions.phpの少なくとも一つの他の関数で利用可能である年の配列を作成しようとします。

function get_the_years() 
{
    global $year_arr = range(2001, date('Y'));
    return $year_arr;
}

それから私は関数でそれを使用したいと思います。それはカスタム分類法 'year'で毎年のための用語を作成します。

function create_year_terms() {
foreach($year_arr as $value){   
    $term = term_exists($value, 'year');
        if ($term !== 0 && $term !== null) {
            echo $value . ' category exists!';
        }
        else { wp_insert_term(
            $value, // the term 
            'year', // the taxonomy
            array(
                'description'=> 'The name of a year',
                'slug' => $value )
            );
            echo'term '. $value . ' created';
        }
    }

}

そしてこの関数をwp_loginフックに追加しようとしています

add_action('wp_login', 'create_year_terms');

私は自分の趣味を変えようとしました、そして、私は「何か」を理解すると思います、しかし、私は自分のfunctions.phpに間違ったものを入れることによって何かを殺すのが少し怖いので、私の質問を許してください。

1
schwarzgrau

globalスコープで定義された変数にアクセスするためには、それを再度呼び出したいときはいつでもglobalキーワードでそれを参照しなければなりません。

あなたの場合、関数create_year_terms()はそのスコープ内でglobal $year_arrを呼び出さなければなりません。

また、次のように、変数の名前をglobalとして$GLOBALS配列を使用して、常にkeyスコープ内の変数を取得できます。

$GLOBALS["year_arr"]

更新

あなたのフックの決定に関して:まず第一に、それはあなたのテーマ関数ではなく プラグイン にこの種のコードを入れることがベストプラクティスです。次に、initにフックします。またはあなたのプラグインのためのアクティベーションフックを登録してから、おそらく1年のカスタム間隔で wp_schedule_event を使用してください。

…でも、これも本当に必要なのでしょうか。

2
Sunyatasattva

まず、スコープ内でグローバル変数を定義しなければなりません。そこにアクセスしたいのです。つまり、関数の外(そしておそらくクラスの外にある場合もあります。

次に、私の知る限りでは、まず変数グローバルを「レンダリング」してから、新しい行にその値を設定する必要があります。

global $myvar;
$myvar = "whatever";

関数内では、使用する前に変数をグローバルとして再度宣言する必要があります。そうでなければ、それは単に 'outside'からのグローバルな(しかしまだ知られていない)変数と同じ名前を持つローカル変数になるでしょう。

そして、その関数であなたがしたいことは、正確には何ですか?あなたはフックについて知っていますか?

wp_loginは非推奨です - wp_signonを使用してください。しかし、私はあなたがしても構わないと思っていることがわかりません...

1
tfrommen