web-dev-qa-db-ja.com

is_front_pageがfunctions.phpで機能しない

私はフロントページにいるかどうかという条件でwp_enqueue_styleを使ってCSSファイルをインクルードしようとしています。私はこのコードでホームページをテストしています:

if ( is_front_page() ) wp_enqueue_style ('TBDhome', get_template_directory_uri() . '/css/TBDhome.css','all');

私がヘッダーファイルでテストしていてCSSファイルをインクルードしていたとき、それは見つけられました。

1
LindaH53

この質問は投票されないかもしれませんが - 十分な情報が提供されておらず、他の場所でチュートリアルを見つけるのはかなり簡単なので、私はあなたを手助けします。

テーマのfunctions.phpファイルでは、これを行う必要があります。

add_action( 'wp_enqueue_scripts', 'wp5849_scripts' );
function wp5849_scripts() {
    if ( is_front_page() ) :
        wp_enqueue_style('TBDhome', get_stylesheet_directory_uri() . '/css/TBDhome.css');
    endif;
}

これが何をしているのか:最初の行add_actionはWordPressの内部セットアップ中のある時点であなたの関数wp5849_scripts()を実行するためのフックです。アクションフックとフィルタについての詳細は WordPress codex で読むことができます。

2番目の部分は、スタイルシートをエンキューするための実際の機能です。それがサイトのフロントページであるかどうかを確認し、合格した場合はスタイルシートをロードします。

子テーマを使用している場合、get_stylesheet_directory_uri() _ parent _ themeディレクトリを返すので、ディレクトリをget_template_directory_uri()に更新しました。 get_stylesheet_directory_uri()は、現在アクティブになっているテーマ(親または子)に関係なく機能します。

wp_enqueue_stylehere に渡される引数についてもっと読むことができます

注:functions.phpにスクリプトとスタイルをエンキューしている関数が既にあるかもしれません(add_action( 'wp_enqueue_scripts')フックを探してください)。その場合は、単に追加する必要があります:

if ( is_front_page() ) :
        wp_enqueue_style('TBDhome', get_stylesheet_directory_uri() . '/css/TBDhome.css');
endif;

add_actionが呼び出している関数へ。私はこれをオプションとして追加したいと思いました。

編集: OPのコメントに基づいて、より大きなテーマの問題や設定の問題があるようです。これはheader.phpにスタイルシートを配置するオプションです。

if ( is_front_page() ) {
    echo '<link rel="stylesheet" id="TBDHome-css"  href="' . get_stylesheet_directory_uri() . '/css/TBDhome.css" type='text/css' media='all' />
}
0
disinfor

wpオブジェクトはまだ設定されていないため、is_front_page()はwpフックの前にfalseを返します。

//* If placed directly in functions.php, this will work
add_action( 'wp', 'wpse_282498_wp' );
function wpse_282498_wp() {
  if( is_front_page() ) {
    do_something_useful();
  }
}

//* If placed directly in functions.php, this will *not* work
if( is_front_page() ) {
  //* Because this will never be run
  do_something_useful();
}
0
Nathan Johnson