web-dev-qa-db-ja.com

Functions.phpでカスタム分類法のためのget_termsを使う

分類項目の名前を取得し、それらをテーマ管理パネルに含めようとしています。

関数retrieve_my_terms(){
 
グローバル$ terms; 
 
 $ terms = get_terms( '分類法'); 
 
 foreach($ termsを$ termとして){
 $ option = $ term-> name; 
 return $ option; 
} 
} 
 ____。]

この機能は、カスタムの投稿タイプと分類法を作成した機能の後に追加されます。

私が見つけたことから、initアクションはテーマのfunctions.phpファイルがインクルードされた後に発生しているように思われるので、私が直接functionsファイルで用語を探しているのであれば登録されました。

言い換えると、init関数はテーマ関数ファイルがインクルードされるまで起動しません。したがって、用語の検索はinitの後に行わなければなりません。

私の問題は、私がinitの後に用語を検索する方法を知らないということです。

任意の答えは大歓迎です!

ありがとうございました!マダリン

2
Madalin

Init自体にアクションを追加することができます。単にadd_action呼び出しの優先順位を上げるだけです。優先順位が高いほど、後で関数が呼び出されます。

add_action('init', 'retrieve_my_terms', 9999);

しかし、私の提案では、できる限り遅く、できれば最初に使用する直前に、このようなことをするべきです。フルワードプレスがロードされ、出力の処理を開始する準備ができた後に呼び出されるアクション'wp_loaded'があります。そのアクションはあなたのために働くかもしれません。

1
Mridul Aggarwal

functions.phpinitの前にロードされるのは本当です - そしてほとんどの投稿タイプはそのフックを使って登録されるでしょう。しかし、後で使えるフックがあります - そしてそれはもっと適切でしょう。

あなたはfunctions.phpの中の用語にアクセスする必要があると言います。しかし、 いつ それらが必要ですか。 initは前後のページロードごとに発生します。また、ページロードごとに用語を取得するという意味ではありません。あなたに利用可能なたくさんのフックがあります、そして、それらはすべてさまざまな文脈で引き起こされます。あなたがどのフックを使うべきかを決定する言葉であなたが何をしたいのかを正確に私たちに伝えれば。

(私は で混乱しています - それらをテーマ管理パネルに含めてください )。 adminメタボックスでリストを出力しようとしている可能性があります。とにかく、あなたはいくつかのコードを含めることができますか?

1
Stephen Harris

Functions.phpのグローバルスコープで関数を問題なく定義できます。

singが問題になるのは、登録前の関数です。関数をグローバルスコープのfunctions.phpで実行する代わりに、フックで実行します。 functions.phpでフックに含まれないことを許可する必要があるのは、add_actionの呼び出しだけです。

したがって、すべてをフックに入れ、呼び出しを行います後のフック/アクションで投稿タイプの登録、グローバルの緩いコードではなく

0
Tom J Nowell