Front-page.phpファイルでis_front_page()を使用した場合、期待どおりに動作します。しかしながら、私が私のテーマのfunctions.phpファイルの中で同じ機能を使うならば、それは働かない。これは正常な動作ですか?もしそうでなければ、それはどういうわけかトラブルシュートできますか?
Settings-> readingで私は自分のフロントページを "フロントページ"と呼ばれるページに設定したので、それはすべて設定されていると思います。
_編集_
functions.phpに以下を追加しても機能しませんが、私のheader.phpファイルにis_home_page()を追加すれば期待通りに機能することを約束します。
add_action('init', 'my_test');
function my_test(){
if(is_front_page())
echo 'is it?';
}
関数ファイルでis_front_page
をどの程度正確に使用しているかによって、これは通常の動作になります。
あなたがfunctions.php
のグローバルな範囲内でそれを使用するなら、それは機能しません。
どうして? WordPressは現在のページでfunctions.php
が設定される前に$wp_query object
をロードするからです。 is_front_page
は$wp_query->is_front_page()
の周りのラッパーです。クエリが設定されていない場合は常にfalseを返します(またはwp_debug
がオンの場合は警告をスローします).
コーデックスから:
警告:あなたはWordPressのinitアクションフックの後にのみ条件付き問い合わせタグを使うことができます。テーマの場合、これはfunctions.phpの本体、つまり関数の外側でコンディショナルタグを使用している場合、コンディショナルタグが正しく機能しないことを意味します。
chrisguitarguy によるコーデックスの引用符は無効になりました。それはに更新されました:
警告:条件付きクエリタグのみ使用できます 後 WordPressのposts_selectionアクションフック( wp actionフックはこれらの条件を使用できる最初のものです )テーマの場合、これはfunctions.phpの本体、つまり関数の外側でコンディショナルタグを使用している場合、コンディショナルタグが正しく機能しないことを意味します。
したがって、initフックは機能しなくなりました。前述のとおり、wpフックは、条件付きクエリタグを使用する場合に使用できる最初のフックです。そのため、コンディショナルタグを機能させるために、これが最小限の定型句です。
add_action('wp', 'function_that_uses_conditional_tags');
function function_that_uses_conditional_tags() {
// place code here
}
しかし、その「警告」は、 コンディショナルタグ についてのコーデックスページのまさにその序論で見られるようにコンディショナルタグに普遍的に適用可能であるように思われるが、それが本当にフロントエンドだけに当てはまることを強調していないことに注意しなさい。
wpフックはバックエンドでさえ起動しません!あなたが例えばis_admin()でそれを使用するならば、それは決してtrueに評価されないでしょう。その場合は別のフックを使用してください。実際のところ、initはis_admin();でも問題なく動作します。
これは予想される動作です。 functions.php
ファイルは、クエリがセットアップされて使用可能になる前に解析されるため、functions.php
の内部にif ( is_front_page() )
が裸になっている場合、クエリがないためfalseを返します。
必要なのは、is_front_page()
条件付きをコールバック関数の内側に配置することです。つまり、適切なアクションに フックします -つまり、 after を起動するアクションは、クエリがセットアップ/利用可能です。
参考のため、I think functions.php
はplugins_loaded
で解析されます([ might be setup_theme
) 、およびクエリ条件はinit
以降で使用できる必要があります。
plugins_loadedとsetup_themeが動作しません
course のこれらのフックは機能しません。それらは起動しますクエリがセットアップされる前。 is_front_page()
条件は、クエリのセットアップ後でのみ利用可能です。これはinit
で発生します。
ユーザーがフロントページを表示している場合は、remove_action()が必要です。
あなたは本当に私たちに言っていない正確にあなたがしようとしていること。あなたの質問は、is_front_page()
が利用可能になったときに尋ねられたものであり、これが私たちの答えです。アクションを削除する方法/時期を知ることは、ほとんどまったく異なる質問です。削除するadd_action()
呼び出しを提供する必要があります。
Template_tagsが働いている初期のフックはwp
アクションフックです。 init
フックのようなそれより前のすべてのフックは、is_front_page()のようなテンプレートタグでは動作しません。