web-dev-qa-db-ja.com

is_front_pageはテーマファイルでのみ機能し、functions.phpでは機能しません。

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?';
}
4
Mike

関数ファイルで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の本体、つまり関数の外側でコンディショナルタグを使用している場合、コンディショナルタグが正しく機能しないことを意味します。

http://codex.wordpress.org/Conditional_Tags

5
chrisguitarguy

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();でも問題なく動作します。

5
Stephen Miller

これは予想される動作です。 functions.phpファイルは、クエリがセットアップされて使用可能になる前に解析されるため、functions.phpの内部にif ( is_front_page() )が裸になっている場合、クエリがないためfalseを返します。

必要なのは、is_front_page()条件付きをコールバック関数の内側に配置することです。つまり、適切なアクションに フックします -つまり、 after を起動するアクションは、クエリがセットアップ/利用可能です。

参考のため、I think functions.phpplugins_loadedで解析されます([ might be setup_theme) 、およびクエリ条件はinit以降で使用できる必要があります。

編集

plugins_loadedとsetup_themeが動作しません

course のこれらのフックは機能しません。それらは起動しますクエリがセットアップされる前is_front_page()条件は、クエリのセットアップ後でのみ利用可能です。これはinitで発生します。

ユーザーがフロントページを表示している場合は、remove_action()が必要です。

あなたは本当に私たちに言っていない正確にあなたがしようとしていること。あなたの質問は、is_front_page()が利用可能になったときに尋ねられたものであり、これが私たちの答えです。アクションを削除する方法/時期を知ることは、ほとんどまったく異なる質問です。削除するadd_action()呼び出しを提供する必要があります。

4
Chip Bennett

Template_tagsが働いている初期のフックはwpアクションフックです。 initフックのようなそれより前のすべてのフックは、is_front_page()のようなテンプレートタグでは動作しません。

1
chifliiiii